Lua基础 类型和值(一)

Lua是一个动态类型的语言,没有类型定义,每个值都有自己的类型。

Lua有8个基本类型,nil, boolean, number, string, userdata, function, thread, table,利用type函数可以打印出一个给定值的类型。

注意最后一行,无论x为什么值,结果一定是string,因为type函数的结果总是一个string。

变量没有预定义的类型,任何变量可以有任何类型的值

注意最后两行,函数也是可以用来赋值的,你可以像对待其他的变量一样来把函数当成一个变量。

通常情况下,如果你把一个变量用来包含不同类型的值,会使代码看起来很混乱。但是,有时有效地利用这个特性,会有意想不到的效果。例如使用nil来对函数的返回值就行判断,来区分一个正常的返回值还是一个异常条件。

1 Nil

Nil类型只有一个值,nil,跟其他任何值都不同。如我们之前看到的,在一个全局变量未被赋值之前,它的值为nil,你也可以通过将一个全局变量赋值为nil来删除它。Lua用nil作为一个无值类型,表示一个变量不再起作用。

2 Booleans

Boolean类型含有两个值,true和false。但是Lua中可以表示条件的变量不仅仅boolean类型,任何值都可以表示条件。Lua认为false和nil为"假",其他任何值都是"真"。注意,跟其他语言不同的是,Lua认为0和空字符串为"真"。

3 Numbers

Number类型代表实数(在计算机中占两个地址的浮点数)。Lua没有整型,并且也不需要。有个普遍的误解,使用浮点型会有算术错误,一些人害怕浮点型即使一个简单的“加”运算也会有奇奇怪怪的问题。但事实上,用一个double类型来表示一个integer,不存在任何边界问题(除非这个数大于1.0e14)。Lua可以表示任何的32-bit的整数,不存在任何边界问题。除此之外,大多数cpu处理浮点数会比整数要快。

不过,Lua为了编译方便,也使用了其他的number类型,例如long和单浮点数。这是为了兼容一些不支持double类型的设备。

以下这些numeric常量都是合法的

4

0.4

4.57e-3

0.3e12

5e+20

4 Strings

String在Lua中与其他编程语言没有什么不同,都是表示一串字符。但是Lua可以在字符串中含有任何字符,包括0.

String在Lua中不可被更改,是常量。你不能更改一个字符串中的某一个字符,但是可以创建一个新的string。例如

Lua的string是自动管理内存的,其他的lua对象(例如table, function,etc)也一样。这意味着你不必担心string的内存分配与释放,让Lua为你处理这些问题就好了。一个string可以包含一个字符,也可以包含一整本书,Lua可以有效地处理长string,处理100k-1M的字符串,对Lua来说是小菜一碟。

4.1 Lua string的划界

上面说了,Lua的string可以包含任何字符,甚至0(在C中,0是被认为是string的结尾的)。因此Lua对字符串边界的判定,不能用0,而是匹配单引号’或者双引号" :

但是在编程的时候,为了风格统一,最后是只用其中一种,除非string本身含有引号。或者在字符串中用转义字符。Lua的string可以使用以下C风格的转义字符:

\a bell

\b back space

\f form feed

\n newline

\r carriage return

\t horizontal tab

\v vertical tab

\\ backslash

\&; double quote

\’ single quote

示例如下:

我们可以在string中用一个字符的ASCII值来表示它,格式为ddd,这里ddd最多包含3个数字字符,例如:

也有善意的提醒:何不去远方!昆明呀——赶一个花海;

Lua基础 类型和值(一)

相关文章:

你感兴趣的文章:

标签云: