尝试调用nil值(字段'maxn')错误

时间:2018-04-12 04:35:30

标签: lua

mytable = setmetatable({1,2,3}, {
    __add = function(mytable, newtable)

     for i = 1, table.maxn(newtable) do
            table.insert(mytable, table.maxn(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

我在终端中运行时遇到此错误:

lua: metatables4.lua:6: attempt to call a nil value (field 'maxn')
stack traceback:
    metatables4.lua:6: in metamethod '__add'
    metatables4.lua:15: in main chunk
    [C]: in ?

但是当我尝试在tutorialspoint编译器上运行它时,它会运行。

1   1
2   2
3   3
4   4
5   5
6   6

这应该是我的输出。我无法确定这里究竟出现了什么问题,因为它运行在tutorialspoint编译地面lua编译器上。

我应该更改什么才能在我的终端上工作?

2 个答案:

答案 0 :(得分:3)

来自Lua 5.2 Reference Manual - 8.2 – Changes in the Libraries

  

不推荐使用函数table.maxn。如果你真的需要的话,写在Lua   它

您运行的是Lua的最新版本而不是tutorialspoint。

您可以在脚本顶部添加以下代码,使其在Lua 5.1+版本中运行:

table.maxn = table.maxn or function(t) return #t end

答案 1 :(得分:1)

使用#newtable代替table.maxn(newtable)