2012-01-30 20 views
5

可能性の重複:
“main” function in Lua?スクリプトがdofile()でインクルードされているかどうか、またはLuaで直接実行されているかどうかを確認する方法は?

はPythonでは、あなたは(通常はテストのために、それがある場合には、いくつかの関数を呼び出す)スクリプトを直接使う呼び出されているかどうかを確認することができ、かなり簡単に:

if __name__ == "__main__": 
    main() 

それは別の中で直接(lua foo.lua)を実行するか、含まれているかどうかを検出するために、Luaの中で同じことを行う方法がありますcript(dofile('foo.lua'))。

あり、それが定義されているかどうかdofile('foo.lua')前にメインスクリプトファイルにいくつかのダミーグローバル変数を定義し、foo.luaのチェックインの些細な(そして醜い)の方法は常にあるが、より良い方法があった場合、それは素晴らしいことですこれをする。

+0

あなたはそうです、重複して申し訳ありません... – Wookai

答えて

7

debug.getinfo(2)http://www.lua.org/manual/5.1/manual.html#pdf-debug.getinfo

から

nilであれば、あなたは、コールスタックのレベルの機能で動作する機能を意味し、関数の値として番号を与えることができます確認することができますlevel 0は現在の関数です(getinfo自体)。レベル1はgetinfoを呼び出した関数です。等々。 functionがアクティブな関数の数より大きい数の場合、getinfoはnilを返します。

+0

これは、組み込みコードから直接実行される関数に対しても 'true'を返します。 –

+0

私はOPが効果的にチェックしていると仮定したものです:このスクリプトが直接呼び出された場合(またはrequire/dofile/loadfile/loadstring /などでロードされた場合) – daurnimator

+0

5.2.3を使用しています。 '2'ではなく.getinfo(3)'を実行します。 – dimo414

2

いいえ.Luaは、スクリプトが「直接」呼び出されているかどうかを判断する方法がありません。

注意:LuaとPythonは異なる目的で存在します。 Pythonはコマンドラインスクリプト用に設計されています。スクリプトを書くと、Python、C++などで書かれたモジュールが呼び出されます。 Pythonスクリプトは、最終的にはコードがいつ呼び出されるかを担当しています。

ルアは、埋め込みスクリプト言語です。スタンドアロンのlua.exeインタプリタを使ってコマンドラインスクリプトを作成することは間違いありませんが、それは厄介なものです。言語の主な目的は、C、C++などで書かれたアプリケーションに埋め込まれることです。

このため、は「メイン」スクリプトのの概念ではありません。どのように "メイン"とは何が定義されますか? Cコードがいつでも任意のスクリプトを読み込むことができれば、どちらが "main"ですか?

この概念を定義したい場合は、かなり簡単です。ちょうどあなたの「メイン」スクリプトの先頭でこれをスティック:確か

do 
    local old_dofile = dofile 
    function new_dofile(...) 
    if(__is_main) then 
     __is_main = __is_main + 1 
    else 
     __is_main = 1 
    end 
    old_dofile(...) 
    __is_main = __is_main - 1 
    if(__is_main == 0) then __is_main = nil end 
    end 
    dofile = new_dofile 
end 

が、これはrequireを搭載した何のために動作しません。 requireのバージョンも作成する必要があります。そして、外部コードがC-APIの読み込み関数を使用している場合には、確かに動作しません(そのため、requireはおそらく動作しません)。トップレベルで

+0

-1の理由は何ですか? –

+0

私はあなたにdownvoteをしませんでしたが、私はLuaの使用法をkludgeと呼んでいますが、埋め込みが理由かもしれないと思います。私は組み込み時に本当に輝くことに同意します。それはスクリプト言語としても非常に便利です。 – Wookai

関連する問題