Lua - 只调用metatable中的一个运算符

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方法然后它工作..

Mud*_*Mud 5

test = test + 3
Run Code Online (Sandbox Code Playgroud)

松散等同于:

test = getmetatable(test).__add(test, 3)
Run Code Online (Sandbox Code Playgroud)

您正在指定__addto 的返回值test.

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

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)