You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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)#newtable
    • table.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

火山引擎 最新活动