Lua - 在元表中只调用一个运算符。

我对 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)

没有找到任何关于这个问题的描述。另外我_注意到_如果元表是一个单独的变量,并且传递给setmetatable方法,那么它就可以工作。

点赞
用户107090
用户107090

我得到的错误是

尝试在全局变量“test”(一个空值)上执行算术运算

这意味着在最后一行中“test”是空值。在“__add”中需要返回一些内容。

2013-11-19 16:16:08
用户501459
用户501459
`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


2013-11-19 19:58:42