2012-03-16 18 views
0

問題があります。デバッグ名前空間を使わずに自分の関数を呼び出した関数の名前を知る方法。例えば:私はデバッグの名前空間を使用できるようになりますが、私が使用できるかどう関数名の取得方法

function test1() 
    test2() 
end 

function test2() 
    --How to get here name of function which have called my function test2. 
    --How to get here "test1"? 
end 

それはだが簡単になります。誰にも分かりますか? 私の英語は申し訳ありません。

答えて

1

関数には名前がありません。関数は、数値が5.23のように、または文字列"string"のように、Luaの値です。それらは価値観であり、多くの場所に保存することができます。したがって、関数の実名はありません。デバッグシステムは、最初に宣言された方法に基づいて関数名を割り当てますが、それはそれです。

関数が呼び出した人を知る必要がある場合、呼び出し元を関数パラメータとして受け取るのはその関数の責任です。

+0

興味深い考え方ですが、test2()を呼び出す機能がたくさんあります。私は約50ファイルを発見し、各ファイルは2-5コールを持っています。 – Lobster

+0

@ user1274868:あなたは2つの選択肢があります:それらのすべての呼び出しを変更するか、または実行しないでください。あなたがしたいものは*不可能です*。デバッグライブラリがなくても、その中にもいくつかの関数だけが名前を持っています。 –

+0

あなたの答えに感謝します。私はスクリプトtest2( "module_name")の関数test2()のすべての呼び出しを置き換える< – Lobster

0

これは問題の半分を解決しませんが、FuncTablesという名前を付けることができます。これを使って問題を解決することができるかどうかはわかりません。

-- create a functable -- 

functable = {name = "bob"} 
metatable = {} 

metatable.__call = function() 
    print "you just called a table!" 
end 

setmetatable(functable,metatable) 

-- call a functable and get it's name -- 

functable() 
print(functable.name)