说我有以下代码:
local t = {};
setmetatable(t, {__call=print});
t(3, 5, 7)
而不是打印:
3 5 7
打印:
table: 0x9357020 3 5 7
表的id是t
的。
我怎样才能让它像我直接拨打print
一样?
答案 0 :(得分:5)
你不能; __call
指定的函数总是被传递给被调用的项。
然而,你可以做的是创建一个包装器函数,它只丢弃第一个参数并调用你最初只想在第一个参数之后调用的函数,并将该包装函数设置为__call
值。
答案 1 :(得分:3)
你不能,但你可以使用这段代码:
local t = {}; setmetatable(t, {__call=function(t,...)print(...)}); t(3, 5, 7)
打印3,5,7 `