我创建了一个元表,其中__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)
哪个叫?
我已尝试过各种组合但未能看到模式.
创建了一个元表,其中__add和__sub取一个表和一个数字.
__add和__sub采用两个操作数.其中一个必然是一个表或用户数据,它有你的metatable,另一个可以是任何东西.Lua不关心其他操作数的类型.
如果任一操作数具有带特定运算符(+- > __add,-=> __sub)的处理程序的元表,则将调用该处理程序.
在你的例子中,Lua不仅不关心n是正面还是负面,它不关心它是否是一个数字.该-中-n没有任何与__sub元方法-这是一元减运算符,而__sub处理的二进制负操作.
Lua如何确定使用哪个?
该+运营商是一个"__add"事件.当你说op1 + op2,Lua op1用一个__add处理程序检查metatable .如果找到一个,则调用它.否则它会检查op2.