跟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
本文详细介绍了Lua语言中如何使用__call元方法来实现类似C++中functor的功能。通过一个具体的示例展示了如何定义一个Lua表,并设置其__call元方法,从而能够像调用函数那样调用这个表。

1612

被折叠的 条评论
为什么被折叠?



