2.2 值与类型
Lua 是一种 动态类型语言。这意味着变量没有类型,只有值才有类型。所有的值都可以被放在变量里,当作参数传递到另一个函数中,并被函数作为结果返回。(变量不需要定义)
Lua 中有八种基本类型:
nil, boolean, number, string, function, userdata, thread, table.
2.2.1 nil类型
nil 类型只有一种值 nil ,它的主要用途用于标表识和别的任何值的差异;通常,当需要描述一个无意义的值时会用到它。
2.2.2 boolean类型
(1) boolean只有两种值:false 和 true。
(2) nil 和 false 都能导致条件为假;而另外所有的值都被当作真。
(3) lua中认为0和空字符串都为真。
2.2.3 number类型
Number 只表示实数,lua中没有整型。
(编译lua时,可以使用长整数或者单精度浮点型代替数值类型)
可以支持到小数点后14位数
2.2.4 string类型
String 表示一串字符的数组。 Lua
是 8-bit clean
的:字符串可以包含任何 8
位字符,包括零结束符 ('\0
')
2.2.4.1 长括号定义
前面提到引号(‘’、“”)还可以用一种长括号括起来的方式定义
使用区别
2.2.4.2 自动转换
运行时,Lua会自动在string和numbers之间自动进行类型转换,当一个字符串使用算术操作符时,string就会被转成数字。
反过来,当Lua期望一个string而碰到数字时,会将数字转成string。
..在Lua中是字符串连接符,当在一个数字后面写..时,必须加上空格以防止被解释错。
2.2.4.3 函数转换
tonumber()函数
tostring()函数
2.2.5 function类型
(1) Lua可以调用(和处理)用 Lua 写的函数以及用 C 写的函数
(2)函数是第一类值(和其他变量相同),意味着函数可以存储在变量中,可以作为函数的参数,也可以作为函数的返回值。
函数名和函数加括号的不同
2.2.6 userdata类型
userdata 类型用来将任意 C 数据保存在Lua 变量中。 userdata在Lua中除了赋值和相等比较外没有预定义的操作。
Lua可以调用lua或者C实现的函数,Lua所有标准库都是用C实现的。标准库包括string库、table库、I/O库、OS库、算术库、debug库。
2.2.7 thread类型
thread 类型用来区别独立的执行线程。2.2.8 table类型
(1)关联数组可以用任何东西(除了nil)做索引,而不限于数字。
(2)table可以以不同类型的值构成;它可以包含所有的类型的值(除 nil 外)。
(3) table 是lua 中唯一的一种数据结构。
(4)支持以a.name 的形式表示 a["name"]。
(5)跟索引一样, table 每个域中的值也可以是任何类型(除 nil外)。特别的,因为函数本身也是值,所以 table 的域中也可以放函数。2.2.9 获取变量类型的函数
type
可以返回一个描述给定值的类型的字符串