Lua中不使用结果进行加法操作

我正在尝试在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

点赞
用户3574628
用户3574628

Lua不允许这样做,因为所有的操作符(除了函数调用)都旨在始终计算出一个结果。没有好的理由去丢弃表达式的结果,而且通常表明了一个编码的错误。

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

assert(not (t1 + t2))

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

编辑:通常情况下,当我们添加两个数字时,我们期望得到一个新的数字,而不改变原来的数字。Lua的元方法设计成与此相同。要执行像打印或修改操作数的副作用,使用普通的命名方法更容易和更清晰。

2021-06-05 21:37:46