Skip to Content
Lua 自動化基礎 1:變數與輸出

基礎 1:變數與輸出

這一頁假設你完全沒寫過程式。看完這一頁,你會認識 Lua 最基本的四件事:註解、變數、 數字與字串、還有兩種印出結果的方式。

註解

腳本裡 -- 開頭到那一行結尾的文字,程式完全不會執行——那是寫給人看的說明文字, 叫做「註解」。之後每支範例開頭都會有一兩行 -- 註解,說明這支腳本要做什麼。

-- 這一整行都是註解,程式不會執行它

變數:一個有名字的箱子

變數就是一個有名字的箱子,可以放一個值進去,之後用這個名字就能拿回那個值。 在 Lua 裡,local 這個字代表「建立一個新箱子,只有這支腳本自己看得到」:

local count = 3

這行的意思是:建立一個叫 count 的箱子,裡面放數字 3。之後在腳本裡寫 count, 就等於在說「箱子裡現在的那個值」。這個 = 叫做賦值:意思是「把右邊的值放進 左邊這個箱子」,跟數學課教的「兩邊相等」不是同一件事——下面會看到另一個長得像、 意思卻不一樣的 ==。

數字與字串

Lua 的值大致分兩種你現在需要知道的形式:

  • 數字:3、3.14 這樣直接寫的數值。
  • 字串:用雙引號包起來的一段文字,例如 "nexus";" 到下一個 " 之間的 所有內容都是這段文字的一部分。

兩個字串可以用 .. 接在一起(叫做「串接」):

"name=" .. "nexus" -- 結果是 "name=nexus"

如果 .. 旁邊是數字,Lua 會自動把數字轉成文字再接起來,所以 "count=" .. 3 會 變成 "count=3"。

兩種印出結果的方式

  • print(值1, 值2, ...):把值印出來,多個值之間會自動補一個 Tab 字元分隔。
  • log(等級, 訊息):把訊息寫進 Log,等級 是一個字串,最常用的是 "info"。

兩者最後都會出現在 Log 裡;差別只在 print 可以一次印好幾個值、log 則是你自己 決定訊息的等級("info"/"warn"/"error" 等)。

比較是否相等:== 與布林值

Lua 有一種只有兩個可能值的型別,叫布林值:不是 true(成立/對),就是 false(不成立/不對)。「兩個值是不是相等」這種問題,答案就是布林值,寫法是 兩個等號 ==(跟前面「賦值」用的一個等號 = 不同,混用是很常見的錯誤):

count == 4 -- count 現在是不是 4;是的話結果為 true,不是就是 false

之後範例裡看到的「條件」,指的就是一個算出來是 true/false 的東西,== 是 最常見的一種寫法;其他比較與邏輯運算子(~=、<、> 等)留到下一頁介紹。

認識 check()

範例裡常會看到 check(條件, 說明文字):它會判斷「條件」是不是成立,然後在 Log 留下一行 CHECK OK: 說明文字 或 CHECK FAIL: 說明文字,讓你不用自己盯著畫面比對 數字,一眼就能看出腳本跑到這裡時資料對不對。不論條件成不成立,腳本都會繼續往下 執行——check() 只負責記錄,不會讓腳本停下來。

範例:把這些東西兜起來

local pi = 3.14 type(pi) -- 回傳 "number",因為 pi 是數字

type(值) 是 Lua 內建的函式,用來問「這個值是什麼種類」,字串的答案是 "string", 數字是 "number"。範例用它來驗證變數真的是我們以為的型別。

basics_vars.lua下載 basics_vars.lua
-- 變數、字串與數字:Lua 的基本語法。
local name = "nexus"
local count = 3
local pi = 3.14

log("info", "name=" .. name)
log("info", "count=" .. count)
check(count + 1 == 4, "count + 1 == 4")
check(type(pi) == "number", "pi is a number")
print(name, count)
預期輸出
name=nexus
count=3
CHECK OK: count + 1 == 4
CHECK OK: pi is a number
nexus	3

自己跑跑看(存下來、換成自己的完整路徑,做法見上一頁):

nexus_tui.exe --dongle mock --batch --run basics_vars.lua

接下來

下一頁介紹流程控制:怎麼讓腳本依條件做不同的事、怎麼重複做同一件事很多次。