我认为一个简单的虚拟示例文件解释的不仅仅是长词
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)?
__call是一种元方法,应该放在桌子上,而不是桌子本身.
t = {}
m = {}
m.__call = print
setmetatable(t, m)
t(2)
Run Code Online (Sandbox Code Playgroud)
在这里查看.请参阅@Deduplicator优秀评论,以更简洁的方式做同样的事情.
| 归档时间: |
|
| 查看次数: |
338 次 |
| 最近记录: |