文書の出典
- 出典
- Lua 5.5.1 Documentation
- 上流バージョン
- Lua 5.5.1
- 文書状態
- 翻訳
7 – Luaスタンドアロン
LuaはホストCプログラムへ組み込む拡張言語として設計されていますが、スタンドアロン言語としても頻繁に使われます。単にluaと呼ばれる、スタンドアロン言語としてのLuaインタープリターが標準配布物に含まれています。スタンドアロンインタープリターはすべての標準ライブラリを含みます。使用法は次のとおりです。
lua [options] [script [args]]オプションは次のとおりです。
-e stat:文字列statを実行します。-i: scriptの実行後に対話モードへ入ります。-l mod: modを「require」し、その結果をグローバルmodへ代入します。-l g=mod: modを「require」し、その結果をグローバルgへ代入します。-v:バージョン情報を表示します。-E:環境変数を無視します。-W:警告を有効にします。--:オプションの処理を停止します。-:stdinをファイルとして実行し、オプションの処理を停止します。 オプションを処理した後、luaは指定されたscriptを実行します。luaを引数なしで呼び出すと、標準入力(stdin)が端末ならlua -v -iとして、それ以外ならlua -として動作します。
オプション-Eなしで呼び出すと、インタープリターはすべての引数を実行する前に環境変数LUA_INIT_5_5(バージョン付きの名前が定義されていなければLUA_INIT)を調べます。変数の内容が@filenameの形式なら、luaはそのファイルを実行します。それ以外の場合、luaは文字列自体を実行します。
オプション-Eを指定して呼び出すと、Luaはどの環境変数も参照しません。特に、package.pathとpackage.cpathの値はluaconf.hで定義されたデフォルトパスに設定されます。このオプションが有効であることをライブラリへ通知するため、スタンドアロンインタープリターはレジストリのフィールド"LUA_NOENV"を真の値に設定します。ほかのライブラリも同じ目的でこのフィールドを参照できます。
オプション-e、-l、-Wは出現順に処理されます。たとえば、次のような呼び出しは
$ lua -e 'a=1' -llib1 script.luaまずaを1に設定し、次にライブラリlib1をrequireし、最後にファイルscript.luaを引数なしで実行します。(ここで$はシェルプロンプトです。実際のプロンプトは異なる場合があります。)
コードを実行する前に、luaはすべてのコマンドライン引数をargという名前のグローバルテーブルへ集めます。スクリプト名はインデックス0、スクリプト名の後の最初の引数はインデックス1となり、以降も同様です。スクリプト名より前の引数(つまり、インタープリター名とそのオプション)は負のインデックスに入ります。たとえば、次の呼び出しでは
$ lua -la b.lua t1 t2テーブルは次のようになります。
arg = { [-2] = "lua", [-1] = "-la",
[0] = "b.lua",
[1] = "t1", [2] = "t2" }呼び出しにスクリプトがなければ、インタープリター名がインデックス0に入り、その後にほかの引数が続きます。たとえば、次の呼び出しは
$ lua -e "print(arg[1])"“-e”を表示します。スクリプトがある場合、スクリプトは引数arg[1]、···、arg[#arg]で呼び出されます。Luaのすべてのチャンクと同様、スクリプトは可変長引数関数としてコンパイルされます。
対話モードでは、Luaはプロンプトを繰り返し表示して行を待ちます。行を読み取ると、Luaは最初にその行を式として解釈しようとします。成功すれば値を表示します。それ以外の場合は行をチャンクとして解釈します。不完全なチャンクを入力すると、インタープリターは別のプロンプトを表示して、チャンクの完成を待ちます。
完全な各行は新しいチャンクとして読み取られるため、ローカル変数は行を越えて存続しないことに注意してください。混乱を避けるため、行が予約語localで始まると、インタープリターは警告を表示します。
> x = 20 -- global 'x'
> local x = 10; print(x)
--> warning: locals do not survive across lines in interactive mode
--> 10
> print(x) -- back to global 'x'
--> 20
> do -- incomplete chunk
>> local x = 10; print(x) -- '>>' prompts for line completion
>> print(x)
>> end -- chunk completed
--> 10
--> 10グローバル変数_PROMPTが文字列を含む場合、その値がプロンプトとして使われます。同様に、グローバル変数_PROMPT2が文字列を含む場合、その値が副プロンプト(不完全な文の途中で表示)として使われます。
スクリプト内で保護されていないエラーが発生すると、インタープリターは標準エラー出力へエラーを報告します。エラーオブジェクトが文字列ではないもののメタメソッド__tostringを持つ場合、インタープリターはこのメタメソッドを呼び出して最終メッセージを生成します。それ以外の場合、エラーオブジェクトを文字列へ変換し、スタックトレースバックを追加します。警告が有効な場合、警告は標準エラー出力へそのまま表示されます。
正常終了時、インタープリターはメインのLuaステートを閉じます(lua_closeを参照)。スクリプトはos.exitを呼び出して終了することで、この手順を回避できます。
UnixシステムでLuaをスクリプトインタープリターとして使えるよう、Luaはファイルチャンクの先頭行が#で始まる場合、その行を読み飛ばします。そのため、chmod +xと#!形式を使い、Luaスクリプトを次のような実行可能プログラムにできます。
#!/usr/local/bin/luaもちろん、Luaインタープリターの場所は使用するマシンによって異なる場合があります。luaがPATHにあるなら、次の方が移植性の高い解決策です。
#!/usr/bin/env lua