Lua决定使用重载的_add或_sub。

我创建了一个元表,其中__add和__sub接受一个表和一个数字。Lua如何确定要使用哪一个?考虑下面两种情况,其中T是一个带有元表的表:

local n=-10
local V=T+n

local n=-10
local V=T-n

哪个会被调用?

我尝试了各种组合,但未能看出任何模式。

点赞
用户1008957
用户1008957

源代码 中,它是两个操作数操作符的标志,这是决定性的。

它不关心操作数值是负数还是正数。甚至不关心你的 n 到底是一个数字还是另一种类型的值。

local n=-10
local V=T+n  -- __add 被调用

local n=-10
local V=T-n  -- __sub 被调用
2012-12-14 06:29:21
用户501459
用户501459

创建了一个元表,其中 __add 和 __sub 采用表和数字为参数。

__add 和 __sub 接受两个操作数。其中一个必定是一个具有你的元表的表或用户数据,另一个可以是任何东西。Lua 不关心另一个操作数的类型。

如果任一操作数具有一个具有特定运算符处理程序(+ -> __add- -> __sub)的元表,那么该处理程序将被调用。

在你的例子中,Lua 不仅不关心 n 是正数还是负数,它也不关心它是一个数字。-n 中的 -__sub 元方法无关--那是一元负号运算符,而 __sub 处理二元减法运算符。

Lua 是如何确定使用哪个的呢?

+ 运算符是一个 "__add" 事件。当你说 op1 + op2 时,Lua 检查 op1 是否具有一个 __add 处理程序的元表。如果它找到了一个,它就会调用它。否则它会检查 op2

2012-12-14 07:42:46