C++中有运算符的重载,lua中也有类似的概念。
比如:
Person2 = {}
function Person2:SayDDD()
local a = 1
local b = 2
local c = a + b
return c
end
setmetatable(Person2, {__call = Person2.SayDDD })
local res = Person2()
由于()默认去调用Person2元表中的_call方法。而__call方法,指向的是Person2的SayDDD方法。
这样就会调用此方法。
但是这里有一个不明白的地方,为啥是__call = Person2.SayDDD呢?
其实我们还可以这样:
function Person2.SayDDD(self, arg)
local name = self.name
local a = 1
local b = 2
local c = a + b
return c
end
setmetatable(Person2, {__call = Person2.SayDDD })
local res = Person2(123)
这里的Person2.SayDDD(self, arg)写成了.的形式。
而Person2(123)
Person2就是self,123就是arg。
所以我们可以知道了,Person2(),这种形式的调用,Person2将作为第一个参数self传递进去。