2

我是 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方法,那么它可以工作..

4

2 回答 2

5
test = test + 3

大致相当于:

test = getmetatable(test).__add(test, 3)

__add您正在分配to的返回值test

_add什么都不返回,所以在第一行之后testnil. 然后你再做一次:

test = getmetatable(test).__add(test, 3)

您无法索引或获取nil.


很容易发现这一点,可能是我会尝试的第一件事:

test = test + 3
print(test)
test = test * 3
于 2013-11-19T19:58:42.623 回答
4

我得到的错误是

尝试对全局“测试”(零值)执行算术运算

这意味着test最后一行是 nil 。您需要在__add.

于 2013-11-19T16:16:08.110 回答