次のコードがあるとします。
local t = {};
setmetatable(t, {__call=print});
t(3, 5, 7)
印刷する代わりに:
3 5 7
それは印刷します:
table: 0x9357020 3 5 7
テーブルの ID は の ID ですt
。
print
直接呼び出したかのように動作させるにはどうすればよいですか?
できません; によって指定された関数__call
には、呼び出されたアイテムが常に渡されます。
ただし、最初の引数を破棄し、最初の引数の後に呼び出したい関数を呼び出すラッパー関数を作成し、そのラッパー関数を__call
値として設定することができます。
できませんが、次のコードを使用できます。
ローカル t = {}; setmetatable(t, {__call=function(t,...)print(...)}); t(3, 5, 7)
3 、5、7 を印刷します `