Lua程序设计(1)

1.2k 词

Lua中的字符串。

字符串

Lua语言中的字符串是一串字节组成的序列,Lua核心并不关心这些字节究竟以何种方式编码文本。

在Lua语言中,字符使用8个比特位来存储。

Lua语言中的字符串是不可变值

像Lua语言中的其他对象(表、函数等)一样,Lua语言中的字符串也是自动内存管理的对象之一,Lua会负责字符串的分配和释放。

  • 可以使用长度操作符#获取字符串的长度,该操作符返回字符串占用的字节数,在某些编码中,这个值可能与字符串中字符的个数不同。
  • 我们可以使用连接操作符..来进行字符串连接,如果操作数存在数值,那么Lua语言会先把数值转换成字符串。
  • 字符串连接总是创建一个新字符串,而不会改变原来作为操作数的字符串

字符串常量

我们可以使用一对双引号或单引号来声明字符串常量,使用双引号和单引号声明字符串是等价的,它们唯一的区别在于,使用双引号声明的字符串中出现单引号的时候,单引号可以不用转义(反过来亦然)。

Lua语言的字符串支持一些C语言风格的转义字符:

在字符串中,还可以使用转义序列dddxhh来声明字符,见上表叙述。

长字符串/多行字符串

可以使用一对双方括号来表明长字符串/多行字符串常量,被方括号扩起来的内容可以包括很多行,并且内容中的转义序列不会被转义。此外,如果多行字符串的第一个字符是换行符,那么这个换行符将会被忽略。

为了应对a=b[c[i]]这样的内容,或者字符串中可能有被注释掉的代码,可以在两个左方括号之间加上任意数量的等号,这样字符串常只有在遇到了包含相同数量等号的两个右方括号时才会结束。

当代码中需要使用常量文本时,使用长字符串是一种理想的选择,但是对于非文本的常量我们不应该滥用长字符串。虽然Lua语言中的字符串常量可以包含任意字节,但是最好不要滥用长字符串。同时,像rn一样的EOF序列在被读取的时候可能会被归一化为n,作为替代方案,最好就是把这些可能引起歧义的二进制数据用十进制或十六进制的数值转义序列进行表示。

Lua5.2开始引入了转义序列z,该转义符会跳过其后的所有空白字符,直到遇到第一个非空白字符。

强制类型转换

Lua语言在运行时提供了数值与字符串之间的自动转换。针对字符串的所有算术操作会尝试将字符串转换为数值(不仅是算术操作,还会在任何需要数值的情况下进行)。

Lua5.3没有实现强制类型转换与整形的集成——算数运算的规则就是只有在两个操作数都是整型值时结果才是整型

可以使用函数tonumber来显式的将字符串转换为数值,当这个字符串的内容不能表示为有效数字的时候该函数返回nil,否则就返回对应的数值。默认情况下,函数tonumber使用的是十进制,也可以指明使用二进制到三十六进制之间的任意进制。

字符串标准库:

用到再说……找就完了。

http://www.lua.org/manual/5.3/

Unicode编码

遇到再说……