テーブルには値のみが格納されます。
関数がテーブルに格納されている場合、それは単なる関数本体であり、引数はありません。引数が適用された場合、tableはその呼び出しの最終結果のみを格納します。
多分、あなたはクロージャーについて話しているかもしれません - 他の関数から返された関数は、字句解析のトップレベル関数からいくつかの引数を取り込みますか?次に閉鎖の内容を確認する機能debug.getupvalue()
を参照してください。
これはあなたが尋ねるものですか?
local function do_some_action(x,y)
return function()
print(x,y)
end
end
local t = {
func = do_some_action(123,478)
}
-- only function value printed
print "Table content:"
for k,v in pairs(t) do
print(k,v)
end
-- list function's upvalues, where captured arguments may be stored
print "Function's upvalues"
local i = 0
repeat
i = i + 1
local name, val = debug.getupvalue(t.func, i)
if name then
print(name, val)
end
until not name
格納されたupvaluesは、トップレベル関数の引数である必要はありません。内部関数の事前計算値を格納しているローカル変数もあります。
また、スクリプトがデバッグ情報を削除してLuaバイトコードにプリコンパイルされている場合、アップルの名前は取得されず、空になります。
あなたは本当にどのような問題を解決しようとしていますか? – lhf
あなた自身を説明するためにコードを使用する方がはるかに明確です。 –