第一版是為 Lua 5.0 編寫的。儘管對後續版本仍然適用,但存在一些差異。
第四版針對 Lua 5.3,可在 Amazon 和其他書店購買。
購買本書,您還可以幫助 支持 Lua 項目。
![]() |
用 Lua 編程 | ![]() |
第一部分。語言 第 2 章。類型和值 |
字符串具有通常的含義:一個字符序列。Lua 是八位元組乾淨的,因此字符串可以包含具有任何數值(包括嵌入式零)的字符。這意味著您可以將任何二進制數據儲存在字符串中。Lua 中的字符串是不可變值。您不能像在 C 中那樣更改字符串中的字符;相反,您需要使用所需的修改創建一個新字符串,如下一個示例所示
a = "one string" b = string.gsub(a, "one", "another") -- change string parts print(a) --> one string print(b) --> another string
Lua 中的字符串像所有 Lua 對象一樣受到自動記憶體管理的約束。這意味著您不必擔心字符串的分配和取消分配;Lua 會為您處理這些操作。一個字符串可以包含一個字母或一整本書。Lua 非常有效率地處理長字符串。在 Lua 中,使用 100K 或 1M 個字符來處理字符串的程式並不少見。
我們可以使用匹配的單引號或雙引號來界定文字字符串
a = "a line" b = 'another line'從風格的角度來看,您應該始終在程式中使用同一類型的引號(單引號或雙引號),除非字符串本身有引號;然後您使用另一種引號,或使用反斜槓轉義這些引號。Lua 中的字符串可以包含以下類似的 C 轉義序列
\a | 鈴聲 |
\b | 退格 |
\f | 換頁 |
\n | 換行 |
\r | 回車 |
\t | 水平製表符 |
\v | 垂直製表符 |
\\ | 反斜槓 |
\" | 雙引號 |
\' | 單引號 |
\[ | 左方括號 |
\] | 右方括號 |
我們在以下示例中說明它們的使用
> print("one line\nnext line\n\"in quotes\", 'in quotes'") one line next line "in quotes", 'in quotes' > print('a backslash inside quotes: \'\\\'') a backslash inside quotes: '\' > print("a simpler way: '\\'") a simpler way: '\'
我們還可以通過轉義序列 \ddd
來指定字符串中的字符,其中 ddd
是最多三個十進制數字的序列。作為一個有點複雜的示例,兩個文字 "alo\n123\""
和 '\97lo\10\04923"'
在使用 ASCII 的系統中具有相同的值:97 是 a
的 ASCII 碼,10 是換行符的碼,49(示例中的 \049
)是數字 1
的碼。
我們也可以透過比對雙重方括號 [[...]]
來界定字串文字。這種括號形式的字串文字可以跨越多行,可以巢狀,而且不會解析跳脫序列。此外,如果字串的第一個字元是換行符號,這種形式會忽略它。這種形式特別適合用來撰寫包含程式區段的字串;例如,
page = [[ <HTML> <HEAD> <TITLE>An HTML Page</TITLE> </HEAD> <BODY> <A HREF="https://lua.dev.org.tw">Lua</A> [[a text between double brackets]] </BODY> </HTML> ]] write(page)
Lua 在執行時會自動在數字和字串之間進行轉換。任何套用在字串上的數字運算都會嘗試將字串轉換成數字
print("10" + 1) --> 11 print("10 + 1") --> 10 + 1 print("-5.3e-10"*"2") --> -1.06e-09 print("hello" + 1) -- ERROR (cannot convert "hello")Lua 不僅在算術運算子中套用此類強制轉換,也會在其他需要數字的地方套用。相反地,Lua 只要在需要字串的地方找到數字,就會將數字轉換成字串
print(10 .. 20) --> 1020(
..
是 Lua 中的字串串接運算子。當你將它寫在數字後面時,必須用空白隔開;否則,Lua 會將第一個點視為小數點。)
儘管有這些自動轉換,字串和數字還是不同的東西。像 10 == "10"
這樣的比較永遠都是錯的,因為 10 是數字,而 "10"
是字串。如果你需要明確地將字串轉換成數字,可以使用函式 tonumber
,如果字串沒有表示適當的數字,它會傳回 nil
line = io.read() -- read a line n = tonumber(line) -- try to convert it to a number if n == nil then error(line .. " is not a valid number") else print(n*2) end
若要將數字轉換成字串,你可以呼叫函式 tostring
或將數字與空字串串接
print(tostring(10) == "10") --> true print(10 .. "" == "10") --> true此類轉換永遠都是有效的。
版權所有 © 2003–2004 Roberto Ierusalimschy。保留所有權利。 | ![]() |