Scribunto:入門/字串
在 Scribunto 中,您大部分時間可能會處理文字。您可能還記得,程式設計師將一段文字稱為字串。幸運的是,Lua 為程式設計師提供了很大的靈活性來輸入和操作字串。在本節中,我們將介紹一些字串基礎知識。
在我們第一個除錯控制檯中的程式中,我們用雙引號包圍了要顯示的文字。
雙引號告訴 Lua 我們輸入的是一個字串,而不是其他 Lua 命令。但是,不僅僅是雙引號可以建立字串。您可以使用單引號來做完全相同的事情。
如果您的文字包含雙引號或單引號,您可以使用另一種型別的引號來避免它。
如果嘗試使用相同型別的引號,您將收到錯誤,因為 Lua 不知道哪些引號是文字的一部分,哪些引號應該用作字串的結束。
能夠使用單引號或雙引號來建立字串非常方便。但是,如果我們要輸入的文字包含單引號和雙引號,會發生什麼?處理這種情況的一種方法是使用轉義序列。在帶單引號或雙引號的字串中,我們可以使用反斜槓 \ 來告訴 Lua 引號應該被解釋為文字中的引號,而不是表示字串結尾的引號。
如果您將反斜槓與一些字母一起使用,那麼它們可能具有特殊含義。例如,\n 插入一個換行符。
您還可以透過在行末新增反斜槓來將文字換行符插入字串。當您在除錯控制檯中嘗試此操作時,您需要在每行末按 Shift + Enter。如果您只按 Enter,您的程式碼將被執行,Lua 會丟擲錯誤,因為它找不到字串的結尾。
Lua 還提供其他轉義序列,例如 \t 代表水平製表符,\v 代表垂直製表符。也可以透過使用反斜槓後跟 0 到 255 之間的數字來指定字元;例如,\65 是字母 "A"。但是,您不太可能需要使用這些。
要將反斜槓字元插入文字中,而不賦予其任何特殊含義,您需要用另一個反斜槓對其進行轉義。
我們已經看到轉義序列允許我們建立包含單引號和雙引號的字串。但實際上,我們還有另一種方法可以做到這一點:使用長括號。要建立一個長括號字串,您用雙方括號包圍您的文字。
長括號字串可以跨多行擴充套件,無需任何特殊格式。出於這個原因,它們也被稱為多行字串。再次提醒,在除錯控制檯中,當您想開始新行時,請記住輸入 Shift + Enter,而不僅僅是 Enter。
為了幫助模組程式碼的格式化,如果長括號字串以新行開頭,那麼該新行不會出現在輸出中。(但這隻適用於字串的開頭,而不是結尾;如果您在字串末尾新增一個額外的換行符,它將被解釋為字串的一部分。)
不能在長括號字串中使用轉義序列。所有這樣的序列將被逐字解釋。
您可能已經注意到,這種雙方括號語法與在 MediaWiki 中建立維基連結的語法相同。由於這種巧合,很容易找到字元串同時包含單引號、雙引號和雙方括號的情況。但是,Lua 仍然有辦法處理這種情況。
這個問題可以透過在兩個方括號之間使用等號來解決。在 Lua 中,您可以使用等號來區分長括號的級別。例如,[=[Hello, world!]=]、[==[Hello, world!]==] 和 [=====[Hello, world!]=====] 都會生成字串 "Hello, world!"。只需確保您使用相同數量的等號來開始和結束長括號。
= [=[Sally said, "He was reading the [[Schrödinger's cat]] article."]=]
Sally said, "He was reading the [[Schrödinger's cat]] article."
您可以在長括號字串中的字串內包含雙括號,只要它們不與開始和結束括號衝突。
= [[The [[Wikipedia]] article]]
Lua error in console input at line 7: nesting of [[...]] is deprecated near '['.
此外,雙方括號在出現在普通字串中時不會被特殊處理。因此,對於日常使用,最好使用普通字串,並將長括號字串保留用於處理多行或其他需要大量轉義序列的情況。
您可能經常發現自己想將兩個字串連線在一起。這可以使用連線運算子 .. 來完成。