Lua运行报错:attempt to call a nil value (field 'maxn')求助
解决Lua中table.maxn调用报错的问题
这个错误很常见——因为table.maxn在Lua 5.2及以后的版本里已经被官方移除了,所以你调用它时会得到nil,自然就触发了"attempt to call a nil value"的错误。
修复后的代码
mytable = setmetatable({1,2,3}, { __add = function(mytable, newtable) for i = 1, #newtable do table.insert(mytable, #mytable + 1, newtable[i]) end return mytable end }) secondtable = {4,5,6} mytable = mytable + secondtable for k,v in ipairs(mytable) do print(k,v) end
关键修改点
- 把所有
table.maxn()调用替换成#运算符:table.maxn(newtable)→#newtabletable.maxn(mytable)→#mytable
为什么这样改?
#运算符是Lua用来获取序列(索引从1开始、连续无间隙的数组)长度的标准方式,完全适配你这里合并两个数组的场景。而table.maxn原本是用来获取表中最大的数字索引(哪怕索引不连续),这个功能在Lua 5.2之后被移除,因为大多数场景下用#就足够,非连续索引的场景可以自己遍历实现。
运行修复后的代码,你会得到预期的输出:
1 1 2 2 3 3 4 4 5 5 6 6
内容的提问来源于stack exchange,提问作者Arda İbrahim Gökçe




