如何防止我可调用的Lua表将自身作为参数传递给__call?

我有以下代码:

local t = {};
setmetatable(t, {__call=print});
t(3, 5, 7)

但输出结果不是:

3    5    7

而是:

table: 0x9357020    3   5   7

输出的第一项是表t的id。

该怎样使它的行为像是直接调用print一样?

点赞
用户148870
用户148870

你不能这样做; __call 指定的函数总是会传递被调用的项。

不过,你可以创建一个包装函数,它只会丢弃第一个参数,并使用第一个参数之后的参数调用你最初想调用的函数,然后将该包装函数设置为 __call 值。

2013-02-25 05:10:24
用户1130744
用户1130744

你不能,但是你可以使用以下代码:

local t = {};
setmetatable(t, {__call=function(t,...)print(...)});
t(3, 5, 7)

会打印出 3,5,7 ```

2013-02-25 12:28:21