值和类型
2017-12-01 00:00:00


一、Lua是一种动态类型语言

Lua是一种动态类型语言。这意味着变量没有类型,只有值才有类型。语言中不存在类型定义。而所有的值本身携带它们自己的类型信息。

Lua中的所有值都是一致(first-class)的。这意味着所有的值都可以被放在变量里,当作参数传递到另一个函数中,并被函数作为结果返回。

例如:

 a=1

 a=“hello world”

以上是合法的,我们所说的类型是指后面所赋值值的类型,即1是数值型,“hello world”是字符串型。

举例说明

二、Lua中有八中基本类型

1、nil(空值)

nil类型只有一种值nil,它的主要用途用于标识和别的值的差异;统称,当需要描述一个无意义的值时会用到它。

2、boolean(布尔值)

boolean类型只有两种值:false和true。 nil 和 false 都能导致条件为假;而另外所有的值都被当作真。

3、number(数值)

number表示实数(双精度浮点数)。双精度浮点数以64位(8字节) 来存储一个浮点数。它可以表示十进制的15或16位有效数字,其可以表示的数字的绝对值范围大约是: 1.7x10^308~1.7x10^308。

4、string(字符串)

String 表示一串字符的数组。Lua是8-bit clean的:字符串可以包含任何8位字符,包括零结束符(\0‘)

在运算过程中,lua的数字的字符型可以与数值型相加

如:

 

5、function,函数(之后会介绍)

6、userdata(自定义)

userdata类型用来将任意C 数据保存在Lua变量中。这个类型相当于一块原生的内存,除了赋值和相同性判断,Lua没有为之预定义任何操作。然而,通过使用metatable,程序员可以为userdata 自定义一组操作。userdata不能在Lua中创建出来,也不能在Lua中修改。这样的操作只能通过C APl。这一点保证了宿主程序完全掌管其中的数据。

7、thread,栈(用table就足够了,因此不作说明)

8、table(表)

table类型实现了一个关联数组。也就是说,数值可以用任何东西(除了nil) 做索引,而不限于数字。table 可以以不同类型的值构成;它可以包含所有的类型的值(除nil外)。table是lua中唯一的一种数据结构;它可以用来描述原始的数组、符号表、集合、记录、图、树、等等。用于表述记录时,lua使用域名作为索引。语言本身采用一种语法糖,支持以a.name的形式表示a[“name”]。有很多形式于在lua 中创建一个table。以下是两种创建与调用table的方法,且都能顺利输出。

跟索引一样,table每个域中的值也可以是任何类型(除nil外)。特别的,因为函数本身也是值,所以table 的域中也可以放函数。这样table中就可以有一些methods了。

注意:

table,function,thread和(full)userdata这些类型的值是所谓的对象:变量本身并不会真正的存放它们的值,而只是放了一个对对象的引用。赋值,参数传递,函数返回,都是对这些对象的引用进行操作。

这些操作不会在暗地里做任何性质的拷贝。

库函数type可以返回一个描述给定值的类型的字符串。

例如:type(a)