Kos*_*ika 2 lua operators metatable
我是Lua的新手,所以可能会错过教程,但问题是:
我有原始的表格和几个我正在应用它的运算符:
original = { 1, 2, 3 }
test = setmetatable(original, {
__add = function (lhs, rhs)
print('adds')
end,
__mul = function (lhs, rhs)
print('multiplies')
end
})
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我做的操作如下:
test = test + 3
test = test * 3
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
attempt to perform arithmetic on global 'test' (a table value)
Run Code Online (Sandbox Code Playgroud)
没有找到关于这个问题的任何描述.另外我注意到如果metatable是一个单独的变量并传递给setmetatable方法然后它工作..
test = test + 3
Run Code Online (Sandbox Code Playgroud)
松散等同于:
test = getmetatable(test).__add(test, 3)
Run Code Online (Sandbox Code Playgroud)
您正在指定__addto 的返回值test.
_add什么都不返回,所以在第一行之后,test是nil.然后你再做一次:
test = getmetatable(test).__add(test, 3)
Run Code Online (Sandbox Code Playgroud)
你不能索引或得到metatable nil.
很容易发现这个,可能是我会尝试的第一件事:
test = test + 3
print(test)
test = test * 3
Run Code Online (Sandbox Code Playgroud)