2

次のコードがあるとします。

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

印刷する代わりに:

3    5    7

それは印刷します:

table: 0x9357020    3   5   7

テーブルの ID は の ID ですt

print直接呼び出したかのように動作させるにはどうすればよいですか?

4

2 に答える 2

5

できません; によって指定された関数__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 に答える