Lua决定使用重载的_add或_sub

Joh*_*ith 2 lua

我创建了一个元表,其中__add和__sub取一个表和一个数字.Lua如何确定使用哪个?考虑以下两种情况与表T(描述metatable)

local n=-10
local V=T+n
Run Code Online (Sandbox Code Playgroud)

local n=-10
local V=T-n
Run Code Online (Sandbox Code Playgroud)

哪个叫?

我已尝试过各种组合但未能看到模式.

Mud*_*Mud 5

创建了一个元表,其中__add和__sub取一个表和一个数字.

__add和__sub采用两个操作数.其中一个必然是一个表或用户数据,它有你的metatable,另一个可以是任何东西.Lua不关心其他操作数的类型.

如果任一操作数具有带特定运算符(+- > __add,-=> __sub)的处理程序的元表,则将调用该处理程序.

在你的例子中,Lua不仅不关心n是正面还是负面,它不关心它是否是一个数字.该--n没有任何与__sub元方法-这是一元减运算符,而__sub处理的二进制负操作.

Lua如何确定使用哪个?

+运营商是一个"__add"事件.当你说op1 + op2,Lua op1用一个__add处理程序检查metatable .如果找到一个,则调用它.否则它会检查op2.