| 手册第七章 | 
 | 
这里介绍了将 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。