* Lua 类型。在 Lua 中,值可以有类型,但是变量的类型都是动态决定的。nil、布尔型、数字 和 字符串 类型的工作方式与我们期望的一样。 o Nil 是值为 nil 的一种特殊类型,用来表示没有值。 o 布尔型的值可以是 true 和 false 常量。(Nil 也可以表示 false,任何非 nil 的值都表示 true。) o Lua 中所有的数字都是双精度的(不过我们可以非常简便地编写一些代码来实现其他数字类型)。 o 字符串是定长字符数组。(因此,要在一个字符串后面附加上字符,必须对其进行拷贝。) * 表、函数 和线程 类型都是引用。每个都可以赋值给一个变量,作为参数传递,或作为返回值从函数中返回。例如,下面是一个存储函数的例子:
-- example of an anonymous function -- returned as a value -- see http://www.tecgraf.puc-rio.br/~lhf/ftp/doc/hopl.pdf function add(x) return function (y) return (x y) end end f = add(2) print(type(f), f(10)) function 12
* Lua 线程。线程是通过调用内嵌函数 coroutine.create(f) 创建的一个协同例程 (co-routine),其中 f 是一个 Lua 函数。线程不会在创建时启动;相反,它是在创建之后使用 coroutine.resume(t) 启动的,其中 t 就是一个线程。每个协同例程都必须使用 coroutine.yield() 偶尔获得其他协同例程的处理器。 * 赋值语句。Lua 允许使用多种赋值语句,可以先对表达式进行求值,然后再进行赋值。例如,下面的语句:
i = 3 a = {1, 3, 5, 7, 9} i, a[i], a[i 1], b = i 1, a[i 1], a[i] print (i, a[3], a[4], b, I)