在 Lua 中使用加法而不使用结果

Using addition in Lua without using the result

我正在尝试 运行 Lua 5.3

中的以下内容
function new_t()
  local self = {}
  setmetatable(self, {
    __add = function(lhs,rhs)
        print('ok so',lhs,'+',rhs)
    end
  })
  return self 
end

local t1 = new_t()
local t2 = new_t()

t1 + t2

我收到一条错误消息 syntax error near '+'。但是,如果我将最后一行更改为 x = t1 + t2,它会 运行 并且打印时不会出现错误。

是否可以在不使用结果值的情况下使用二元运算符?为什么 Lua 不让我自己做 t1 + t2 甚至 1 + 2

Lua 不允许这样做,因为所有运算符(函数调用除外)都旨在始终计算结果。没有理由丢弃表达式的结果,它通常表示编码错误。

如果你只是想测试你的代码,我建议使用 assert:

assert(not (t1 + t2))

我在这里使用 not,因为你的 __add 函数没有 return 任何东西。

编辑:通常,当我们将两个数字相加时,我们希望得到一个新数字,而不改变原始数字。 Lua 的元方法旨在以相同的方式工作。要执行诸如打印或修改操作数之类的副作用,使用常规命名方法会更容易、更清晰。