2

lua を埋め込んでおり、スクリプトをプリコンパイルしたい。そのために、luac の main を呼び出します (argc を使用すると、ファイルの数は 1 になります)。私の問題は、luac の関数 doargs にあります。変数 i の使い方がわかりません。1つのスクリプトを使用するためです。doargs 関数の後の i の結果は 1 です。そして、main 関数では、argc -= i の後にあります。したがって、argc = 0 で、「ファイルがありません」というエラーが発生します。何か案が ?

4

1 に答える 1

2

luac.lua ファイルをコンパイルするためのコマンド ライン ユーティリティを意図しています。この予想される使用法が、エラーが発生する理由です。

実行可能ファイルを開始すると、OS はプログラムの名前を最初の引数 ( argv[0]) として渡します。main 関数は、luacOS によって呼び出されていると想定しているため、常に少なくとも 1 つの引数があり、それargv[0]が実行可能ファイルの名前になると想定しています。

このためdoargs、for ループは 1 から始まり、最初 (0 番目) の引数は常に無視されます。argv処理したオプションの数を返します。これは、配列内の最初のファイル名のオフセットでもあります。メイン関数はこれを使用して、ファイルのリストの開始位置を認識します。

main 関数を使用してスクリプトをプリコンパイルしたい場合は、引数配列の先頭に追加の仮引数を指定し、その後にファイルをリストします。できればluac、コマンド ラインから使用して、プリコンパイル済みスクリプトが保存される出力ファイルを次のように指定する必要があります。

luac -o outputFile script.lua

あるいは、純粋な Lua ソリューションについては Programming in Lua ( Compilation, Execution, and Errors )の第 8 章を参照してください。C API ソリューションについてはリファレンス マニュアルluaL_dofileの、luaL_dostringlua_dump、およびlua_load関数を参照してください。

于 2014-07-28T13:43:40.147 に答える