Lua 的執行單元稱為「語句組」,即一串依序執行的語句。語句間可用分號或換行分隔。語句組會被編譯為虛擬機指令再解釋執行,亦可編譯為二進制檔案,兩者可互換。
支援多重賦值,從左到右依次對應:
local x, y = 10, 20 -- x=10, y=20 local x, y = 10 -- x=10, y=nil local x, y = 10, 20, 30 -- x=10, y=20, 30 被捨棄
函數回傳多值時自動填入右值序列:
function getFrame() return 0, 0, 320, 568 end local x, y, w, h = getFrame() -- x=0, y=0, w=320, h=568
賦值前先計算所有右值表達式,再執行賦值,故 i, a[i] = i+1, 20 會設 a[3]=20 而非 a[4]。交換變數:x, y = y, x。
while exp do block endrepeat block until exp(條件可見迴圈內區域變數)if exp then block {elseif exp then block} [else block] end條件判斷:false 和 nil 為假,其餘(含 0、空字串)為真。
return 可回傳多值;break 跳出最內層迴圈;return/break 僅能出現在區塊末尾(需置中可用 do return end)。
for v = var, limit, step do block end(三控制式僅計算一次,v 為區域變數)for k, v in pairs(t) do block end 遍歷所有鍵值for k, v in ipairs(t) do block end 僅遍歷連續整數鍵(1,2,…),遇 nil 停止pairs vs ipairs 差異:ipairs 遇 nil 即止,pairs 遍歷所有鍵。
a and b -- a 假則回傳 a,否則回傳 b a or b -- a 真則回傳 a,否則回傳 b not a -- 回傳 true/false
短路求值,and 優先級高於 or。實用技巧:x = x or v 給預設值。三元運算 (a and b) or c。
.. 運算子:"hello" .. "world" → "helloworld"。數字自動轉字串:4 .. 5 → "45"(字串型)。
-- 陣列式
days = {"Sunday","Monday",...} -- 索引從 1 開始
-- 記錄式
a = {x = 10, y = 20} -- 等同 a={}; a.x=10; a.y=20
-- 通用式
opnames = {["+"]="add", ["-"]="sub"}
-- 尾隨逗號、分號混用皆合法
a = {x=10, y=20; "one", "two"}
字串長度 = 位元組數。Table 長度為最大整數索引 n 使 t[n]!=nil 且 t[n+1]==nil;有「洞」時結果不定。
or and < > <= >= ~= == .. + - * / % not # - (unary) ^
.. 和 ^ 右結合,其餘左結合。