一、字符串
Lua 语言中的字符串是不可变值(immutable value)。我们不能像在 C 语言中那样直接改变某个字符串中的某个字符,但是我们可以通过创建一个新字符串的方式来达到修改的目的,例如:
> a = "one string"
> b = string.gsub(a, "one", "another")
> a
one string
> b
another string
像 Lua 语言中的其他对象(表、函数等)一样,Lua 语言中的字符串也是自动内存管理的对象之一。这意味着 Lua 语言会负责字符串的分配和释放,开发人员无需关注。
可以使用长度操作符(length operator)(#)获取字符串的长度:
> a = "hello"
> print(#a)
5
> print(#"good bye")
8
该操作符返回字符串占用的字节数,在某些编码中,这个值可能与字符串中字符的个数不同。
我们可以使用连接操作符 ..(两个点)来进行字符串连接。如果操作数中存在数值,那么 Lua 语言会先把数值转换成字符串:
> "Hello " .. "World"
Hello World
> "result is " .. 3
result is 3
- 在某些语言中,字符串连接使用的是加号,但实际上 3 + 5 和 3 .. 5 是不一样的。
应该注意,在 Lua 语言中,字符串是不可变量。字符串连接总是创建一个新字符串,而不会改变原来作为操作数的字符串。
> a = "Hello"
> a .. " World"
Hello World
> a
Hello
二、强制类型转换
如果需要显式地将一个字符串转换成数值,那么可以使用函数 tonumber。当这个字符串的内容不能表示为有效数字时该函数返回 nil;否则,该函数就按照 Lua 语法扫描器的规则返回对应的整型值或浮点类型值。
> tonumber(" -3 ")
-3
> tonumber(" 10e4 ")
100000.0
>
> tonumber(" 10e ")
nil
> tonumber("0x1.3p-4")
0.07421875
默认情况下,函数 tonumber 使用的是十进制,但是也可以指明使用二进制到三十六进制之间的任意进制:
> tonumber("100101", 2)
37
> tonumber("fff", 16)
4095
> tonumber("-ZZ", 36)
-1295
> tonumber("987", 8)
nil
- 在最后一行中,对于指定的进制而言,传入的字符串是一个无效值,因此函数 tonumber 返回 nil。
调用函数 tostring 可以将函数值转换成字串:
> print(tostring(10) == "10")
true
网友评论