我是Lua的新手,所以可能会错过教程,但问题是:
我有原始表格,可以与我申请的几个运营商进行交流:
original = { 1, 2, 3 }
test = setmetatable(original, {
__add = function (lhs, rhs)
print('adds')
end,
__mul = function (lhs, rhs)
print('multiplies')
end
})
不幸的是,当我做的操作如下:
test = test + 3
test = test * 3
我收到错误:
attempt to perform arithmetic on global 'test' (a table value)
未找到有关此问题的任何说明。此外,我注意到如果metatable是一个单独的变量并传递给setmetatable
方法,那么它可以工作..
答案 0 :(得分:5)
test = test + 3
宽松地等同于:
test = getmetatable(test).__add(test, 3)
您要将__add
的返回值指定给test
。
_add
不返回任何内容,因此在第一行之后,test
为nil
。然后你再做一次:
test = getmetatable(test).__add(test, 3)
您无法索引或获取nil
的元数据。
很容易发现这一点,这可能是我尝试过的第一件事:
test = test + 3
print(test)
test = test * 3
答案 1 :(得分:4)
我得到的错误是
尝试对全局'test'执行算术(零值)
这意味着test
在最后一行中为零。您需要在__add
中返回一些内容。