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

Jas*_*uit 2 lua callable metatable

说我有以下代码:

local t = {};
setmetatable(t, {__call=print});
t(3, 5, 7)
Run Code Online (Sandbox Code Playgroud)

而不是打印:

3    5    7
Run Code Online (Sandbox Code Playgroud)

它打印:

table: 0x9357020    3   5   7
Run Code Online (Sandbox Code Playgroud)

表的id是t.

我怎么能让它像我print直接打电话一样?

Amb*_*ber 5

你不能; __callalways 指定的函数传递给被调用的项.

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