2013年7月9日 星期二

lua interpreter

指令 lua 是 Lua 直譯器 (interpreter),可執行文字檔或 bytecode 格式的 Lua 命令檔,也可以用在互動模式。

指令格式:

lua 首先會執行環境變數 LUA_INIT 的內容,LUA_INIT 也可以是「@filename」格式,會去執行 filename 的內容。

script 是 Lua 命令檔,整個指令行每個欄位會變成執行 script 時,名為「arg」的全域表格,其中
  • arg[0]:是 script
  • arg[1] 開始分別是每一個 args,每個 args 如果有空格或其它 shell 特殊字元,則需要加 quoted。shell 會移除這些 quotes。
  • #arg:args 的數目,也等於最後 argument 的 index
  • arg 負的 index 包括 script 前面的指令行,一直到 interpreter 名稱。
範例:
編輯 hello.lua,內容如下:(說明:print("印出的字串"),用「..」結合字串)
# this line ignored
print("number args:"..#arg)
print("arg[-2]:"..arg[-2])
print("arg[-1]:"..arg[-1])
print("arg[0]:"..arg[0])
print("arg[1]:"..arg[1])
print("arg[2]:"..arg[2])
print("arg[3]:"..arg[3])
在 shell 執行指令
LUA_INIT='print("LUA_INIT first")' lua -v arg.lua Hello Word "last arg"
其輸出如下:
LUA_INIT first
Lua 5.1.5  Copyright (C) 1994-2012 Lua.org, PUC-Rio
number args:3
arg[-2]:lua
arg[-1]:-v
arg[0]:arg.lua
arg[1]:Hello
arg[2]:Word
arg[3]:last arg
可看出 lua 先執行 LUA_INIT,然後選項 -v 顯示版本訊息,最後才是執行 arg.lua 的結果,印出 args 數目及所有 args,其中 last arg 中間有空格,所以需要用 quote。

script 檔案的第一行如果是「#」開頭,會忽略。如果寫成「#!/usr/bin/lua -v」,在 Linux 檔案就可以直接執行。

指令「luac arg.lua」會將 arg.lua 編譯成二進位的 lua bytecode 程式 luac.out,用法跟 arg.lua 一樣,只是加速 lua 載入時間,不用再編譯成 bytecode。bytecode 檔並不表示執行較快,或檔案較小。

指令「lua -e stat」直接執行 lua statement stat。例如「lua -e 'print("Hello Word")'」

指令「lua -」執行來自 stdin 的 lua 程式,例如「echo 'print("Hello Word")' | lua -」

lua option「-l name」用來載入 library,相當於呼叫 require('name') 。

只執行指令「lua」進入互動模式,prompt the user and execute lines from the standard input。輸入 end-of-file 字元結束,在 Linux 是 Ctrl-D, 在 DOS/Windows 是 Ctrl-Z (Ctrl-Z 在 Linux 會讓程式進入背景執行), 或呼叫來自 os library 的 os.exit()。
  • lines are read until a complete statement is formed or a syntax error is found 
  • 一種中斷不完整的 statement,強迫 syntax error 的方式是輸入「;」。
  • If a line starts with '=', then lua displays the values of all the expressions in the remainder of the line. The expressions must be separated by commas.
  • The default prompts are "> " and ">> ". The global variables _PROMPT and _PROMPT2 can change the prompts.
「lua -i script」在執行完 script 也會進入互動模式

References
  1. man lua
  2. man luac
  3. 本站 Lua 相關文章

沒有留言:

張貼留言

SIP header Via

所有 SIP 訊息 都要有 Via,縮寫 v。一開始的 UAC 和後續途經的每個 proxy 都會疊加一個 Via 放傳送的位址,依序作為回應的路徑。 格式 sent-protocol sent-by [ ;branch= branch ][ ; 參數 ...] s...