第二章 标准语法

2.2 值与类型

Lua 是一种 动态类型语言这意味着变量没有类型,只有值才有类型。所有的值都可以被放在变量里,当作参数传递到另一个函数中,并被函数作为结果返回。(变量不需要定义)


Lua 中有八种基本类型

 nilbooleannumberstringfunctionuserdatathread, 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会自动在stringnumbers之间自动进行类型转换,当一个字符串使用算术操作符时,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 变量中。 userdataLua中除了赋值和相等比较外没有预定义的操作。

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 可以返回一个描述给定值的类型的字符串


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章