各种数据类型
在 Lua 中,有 8 种数据类型:nil、boolean、number、string、function、table、userdata、thread。
函数 type 可以返回变量的数据类型,用 string 表示:
|
|
nil
nil 类型只有一个值 nil。
boolean
boolean 类型有两个值,分别是 true、false。在 Lua 中,只把 false 和 nil 视为“假”,其它值视为“真”。任何值都可以表示一个判断条件。
number
number 类型表示实数,Lua 不区分整数和浮点数。
string
Lua 的 string 类型是不可变值,可以用单/双引号定义 string 类型变量:
|
|
string 变量中可以包含转义字符:
Lua 使用 “ .. “ 来连接字符串:
|
|
如果要连接数字,Lua 会自动把数字转换为 string。
在 Lua 中,使用 “#” 来获取字符串长度:
|
|
table
在 Lua 中,table 是关联数组,可以通过 key 索引得到 value。key 和 value 可以为任意类型的数据(key 不能为 nil)。
table 是 Lua 中唯一的数据结构,可以利用 table 实现很多强大的功能。table 既不是值,也不是变量,而是对象。可以将一个 table 想象成一种动态分配的对象,程序仅持有其引用(或指针)。创建 table 的方式是:
|
|
当然,也可以不指定 key,把 table 当作一般数组使用:
|
|
table 永远是匿名的,一个持有 table 引用的变量与 table 对象自身之间没有固定的关联性。
不同于 C/C++/Java 等语言,Lua 的 table 默认使用 1 作为索引的起始值。
Lua 使用 “#” 返回 table 的最后一个正整数索引值:
|
|
经过多次测试之后,我不太确定 # 的返回值,待定。
也可以这样构造 table:
|
|
在 Lua 中,不建议使用 0 作为起始索引,因为大多数内建函数都假设 table 索引从 1 开始,如果遇到从 0 开始索引的数据,它们无法进行处理。
table 的最后一个元素后面,可以加上逗号“,”:
|
|
table 里的逗号也可以用分号代替,增强可读性:
|
|
userdata
userdata 类型可以将任意的 C 语言数据存储到 Lua 变量中。在 Lua 中,userdata 类型数据没有太多的预定义操作,只能进行赋值和相等性测试。userdata 用于表示一种由应用程序或 C 语言库所创建的新类型。