2

假设我有以下代码:

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

而不是打印:

3    5    7

它打印:

table: 0x9357020    3   5   7

表的 id 是 的t

我怎样才能让它表现得好像我print直接打电话一样?

4

2 回答 2

5

你不能;由 always 指定的函数__call会传递被调用的项目。

但是,您可以做的是创建一个包装函数,该函数仅丢弃第一个参数,并仅使用第一个参数之后的参数调用您最初想要调用的函数,并将该包装函数设置为__call值。

于 2013-02-25T05:10:24.883 回答
3

你不能,但你可以使用这个代码:

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

打印 3 ,5, 7 `

于 2013-02-25T12:28:21.157 回答