第一版是为 Lua 5.0 编写的。虽然在很大程度上仍然适用于更高版本,但有一些区别。
第四版针对 Lua 5.3,可在 亚马逊 和其他书店购买。
购买本书,您还将帮助支持 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
是最多三个十进制数字的序列。作为一个稍微复杂的示例,在使用 ASCII 的系统中,两个字面量 "alo\n123\""
和 '\97lo\10\04923"'
具有相同的值:97 是 a
的 ASCII 代码,10 是换行符的代码,49(示例中的 \049
)是数字 1
的代码。
我们还可以通过匹配双方括号 [[...]]
来分隔字符串字面量。此类括号形式的字面量可以跨多行运行,可以嵌套,并且不解释转义序列。此外,当字符串的第一个字符是换行符时,此形式会忽略该字符。此形式对于编写包含程序片段的字符串特别方便;例如,
page = [[ <HTML> <HEAD> <TITLE>An HTML Page</TITLE> </HEAD> <BODY> <A HREF="https://lua.ac.cn">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。保留所有权利。 |