在 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 的元方法旨在以相同的方式工作。要执行诸如打印或修改操作数之类的副作用,使用常规命名方法会更容易、更清晰。
我正在尝试 运行 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 的元方法旨在以相同的方式工作。要执行诸如打印或修改操作数之类的副作用,使用常规命名方法会更容易、更清晰。