`_call`在我的Lua代码中不起作用

时间:2014-12-05 21:31:20

标签: lua lua-table

我认为一个简单的虚拟示例文件解释的不仅仅是长词

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)

1 个答案:

答案 0 :(得分:5)

__call是一种元方法,应该设置在表的metatable 上,而不是表本身。

t = {}
m = {}
m.__call = print

setmetatable(t, m)

t(2)

Check it out here.请参阅@Deduplicator优秀评论,以更简洁的方式做同样的事情。