手册第七章 |
|
这里介绍了将 Lua 5.0 程序迁移到 Lua 5.1 时会遇到的不兼容性。您可以通过使用适当的选项编译 Lua 来避免大多数不兼容性(参见 luaconf.h
文件)。但是,所有兼容性选项将在 Lua 的下一个版本中删除。
arg
(包含附加参数的表)更改为“vararg”表达式 ...
。(参见 luaconf.h
中的编译选项 LUA_COMPAT_VARARG
。)
for
和 repeat
结构的隐式变量作用域存在细微变化。
[[string]]
)不再允许递归包含。在这种情况下,可以使用新的语法 [=[string]=]
。(参见 luaconf.h
中的选项 LUA_COMPAT_LSTR
)。
string.gfind
已重命名为 string.gmatch
。(参见 luaconf.h
中的选项 LUA_COMPAT_GFIND
)。
string.gsub
的第三个参数为函数且该函数返回 nil
或 false
时,替换将是完整的“匹配”而不是空字符串。
table.setn
已弃用。函数 table.getn
对应于新的长度运算符 (#
),您应该使用它而不是该函数。(参见 luaconf.h
中的选项 LUA_COMPAT_GETN
)。
loadlib
已重命名为 package.loadlib
。(参见 luaconf.h
中的选项 LUA_COMPAT_LOADLIB
)。
math.mod
已重命名为 math.fmod
。(参见 luaconf.h
中的选项 LUA_COMPAT_MOD
)。
table.foreach
和 table.foreachi
已弃用。您可以改用带有 pairs
或 ipairs
的 for
循环。
require
发生了重大变化。但是,当前的行为与以前基本兼容,除了 require
从 package.path
而不是 LUA_PATH
获取路径。
collectgarbage
具有不同的参数。函数 gcinfo
已弃用,应替换为 collectgarbage("count")
。
luaopen_*
函数(用于打开库)。现在必须通过 Lua 调用它们,就像任何 Lua 函数一样。
lua_open
函数已被 lua_newstate
替换,以允许用户设置内存分配函数。用户可以使用标准库中的 luaL_newstate
创建一个使用基于 realloc()
的标准分配函数的状态。
luaL_getn
和 luaL_setn
函数已被弃用。lua_objlen
替换了 luaL_getn
。没有 luaL_setn
的替代品。
luaL_openlib
函数已被 luaL_register
替换。
luaL_checkudata
函数现在在给定值不是指定类型的“userdata”时会抛出错误。在 5.0 版本中,它在这种情况下会返回 NULL
。