script difference - Mini-World-Dev-Org/Mini-World-Wiki GitHub Wiki
首先,需要明确的是迷你世界的 lua 脚本解释器为 lua51 ,这已在游戏脚本基础中提到。
脚本运行环境与标准的 lua51 环境有很大差异,举个简单直观的例子, _G 表实际不包含任何值,对 _G 的修改和读取行为都是由它的元表定义的,优化脚本环境也要以这个元表为突破口。
以下内容假设你还未优化脚本环境,例如 MiniExtend 会优化脚本环境。
实际上这些内容只是表现,要想深入理解参见 脚本环境 。
-
io,package中的所有值 。 -
os.clock(),os.difftime(),os.execute(),os.exit(),os.getenv(),os.remove(),os.rename(),os.setlocale(),os.tmpname()。即os中除了os.date(),os.time()以外的所有函数。
实际上,它们并没有真正的从内存上删除,只是无法通过 _G 索引而已。
-
dofile()和loadfile()函数不会获得它们应有的效果,应该是什么都不做的空函数。 -
error()函数虽然仍会在日志中输出错误信息,但不会抛出错误来终止函数运行,开发者可能不得不使用return error(message);。 - 调用
loadstring()函数会弹出漂浮文字,提示开发者使用LoadLuaScript(),而不会做其它事。 -
print(...)函数在日志中输出而不是在控制台输出。
且格式化方式与标准print(...)差异很大,具体格式化方式可自行测试。
使用标签"global"输出,参见printtag()函数。
同样,它们也没有被真正替换,只是通过 _G 来索引的结果是更改后的函数。
- 返回
table的深拷贝。 -
table:{table}要深拷贝的函数。 -
return:{table}深拷贝后的函数。
- 判断
...的类型是否等于type。 -
type:{string}判断类型,如"string"。 -
return:boolean如果...的类型都等于type,返回false,否则返回true。 - 该函数会完全处理含
nil的...,即使是末尾的nil。 - 例如如果
a的值为nil,isTypeError("number", 0, a)返回true。
- 等价于标准 lua 的
print(...)函数,注意该函数会输出到控制台,而非日志。 -
...:{all & ^nil}输出内容,在遇到nil时终止。
- 在日志以
tag为标签输出...。 -
tag:{string}输出标签,如果不是string类型那么函数行为会令人困惑。 -
...:{all & ^nil}输出内容,在遇到nil时终止。 - 格式化方式与 print() 相同。
- 在日志以
"warning"为标签输出输出警告信息message。 -
message:{string}输出的警告信息。
优化环境是不建议修改这些添加的函数,因为它们可能被内部调用。
最后更新: 2022/1/2