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

Lær*_*rne 3 lua lua-table

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

t = {}
t.__call = print
t.__call(1)
t(2)
Run Code Online (Sandbox Code Playgroud)

根据该文件,因为t是一张桌子,一个电话t,想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 ?
Run Code Online (Sandbox Code Playgroud)

我错过了什么?为什么不t(2)转换成t.__call(2)

Sol*_*ear 5

__call是一种元方法,应该放在桌子上,而不是桌子本身.

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

setmetatable(t, m)

t(2)
Run Code Online (Sandbox Code Playgroud)

在这里查看.请参阅@Deduplicator优秀评论,以更简洁的方式做同样的事情.

  • 或者更短:`t = setmetatable({},{__ call = print})` (7认同)