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

时间:2013-02-25 05:04:30

标签: lua callable metatable

说我有以下代码:

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

而不是打印:

3    5    7

打印:

table: 0x9357020    3   5   7

表的id是t的。

我怎样才能让它像我直接拨打print一样?

2 个答案:

答案 0 :(得分:5)

你不能; __call指定的函数总是被传递给被调用的项。

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

答案 1 :(得分:3)

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

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

打印3,5,7 `