自认为跟C++中的functor比较像,C++中的functor就是重载了operator()的对象,当把一个C++对象当成函数一样调用obj()时,实际上启动了对于obj的operator()的调用,于是一个可被调用的对象就产生了,如果写成obj.()可能会比较符合对象方法的一般做法。
lua table如果设置了metamethod __call,调用对象luaobj()时,会调用到__call方法,具体调用机制跟其它的metamethod没有什么区别。一段简单的代码说明问题:
-
ev={}
-
functin ev.__call()
-
print "called from ev"
-
end
-
-
setmetatable(ev, ev)
-
-
-- test it
-
ev()
阅读(7322) | 评论(0) | 转发(0) |