跟C++中的functor比较像,C++中的functor就是重载了operator()的对象,当把一个C++对象当成函数一样调用obj()时,实际上启动了对于obj的operator()的调用。
lua table如果设置了metamethod __call,调用对象luaobj()时,会调用到__call方法,具体调用机制跟其它的metamethod没有什么区别。
示例:
function table_maxn(t)
local mn = 0
for k, v in pairs(t) do
if mn < k then
mn = k
end
end
return mn
end
mytable = setmetatable({4,6},{
__call = function(mytable, num)
sum = 0
for i = 1, table_maxn(mytable) do
sum = sum + mytable[i]
end
return sum+num
end
})
print(mytable(9))
运行结果:19