我认为一个简单的虚拟示例文件解释的不仅仅是长词
t = {}
t.__call = print
t.__call(1)
t(2)
根据documentation,由于t
是一个表格,因此t
的{{1}}调用应重定向到对t(2)
的调用,就像t.__call
一样。 t.__call(2)
工作正常,没问题,但“语法糖”没有。以下是上述代码的输出:
t.__call
我错过了什么?为什么1
lua: test.lua:4: attempt to call global 't' (a table value)
stack traceback:
test.lua:4: in main chunk
[C]: in ?
未转换为t(2)
?
答案 0 :(得分:5)
__call
是一种元方法,应该设置在表的metatable 上,而不是表本身。
t = {}
m = {}
m.__call = print
setmetatable(t, m)
t(2)
Check it out here.请参阅@Deduplicator优秀评论,以更简洁的方式做同样的事情。