local ftable = {
getPinId = app.getPinId
}
ftableのようなテーブルは、RPCインターフェイスとしてそれをエクスポートし、別の関数に渡されています。 これは機能しますが、関数呼び出しのトレースをログファイルに追加したいと考えています。
単純なアプローチは、これは特に素敵ではない、
local ftable = {
getPinId = function(...) print("getPinId") app.getPinId(...) end
}
ですが。 私のような何かを置くしたいと思います:
local trace = function(func, ...)
return function(...) print(func) func(...) end
end
local ftable = {
getPinId = trace(app.getPinId)
}
しかし、これは非常に望ましい結果を生成しません。パラメータは渡されません。作品
local ftable = {}
setmetatable(ftable, {
__index = function(_, k)
printf("Call: app.%s\n", k) return app[k] end
})
:
もう一つのオプションは、このようなメタテーブルを使用することです。しかし、私はまた、可能な場合に渡されるパラメータを印刷できるようにしたいと思います。
提案がありますか? luajitを使用しているのであれば、それは違いがあります。
あなたのコードは機能するはずですが、機能名のアドレスではなく、機能のアドレスが表示されます。あなたが報告した失敗の例を示してください。 – lhf
それは本当です、私はdebug.getinfo関数を試しましたが、それは役に立たなかった。それは無名関数のように扱われます。私は名前を渡すことができたと思う。今私は、コードを大幅に短縮するmetatableメソッドを使用しています。 – Matt
Lua関数は、すべての値と同様、名前を持ちません。だからこそ@lhfは答えの関数値と文字列を関連付けました。 –