programming in lua (4)

第 7 章。这一章看得不是很明白。

迭代器可以遍历一个集合中的所有元素。在 lua 中,迭代器一般都是函数,每次调用这个函数都会返回集合中的“下一个”元素,前面提到的闭包函数就是实现迭代器的很好选择:

function values (t)
   local i = 0
   return function ()
      i = i + 1
      return t[i]
   end
end

arr = {"one", "two", "three"}

iter = values(arr)
while true do
   local e = iter()
   

阅读全文…

programming in lua (3)

5-6 章。

函数

函数是完成某一特定功能的语句集合。函数使用括号标识,括号内是传递给函数的参数。如果函数只有一个参数,且这个参数是一个字符串或者 table 的 constructor,那么括号是可选的,例如:

print("Hello")
print "hello"
print (type({x = 10, y = 20}))
print (type {x = 10, y = 20})

函数定义的语法是:

function func_name (parameter)
   body
end

如果括号中的参数多于 1 个用逗号隔开,如果没有参数就不用写。

给函数传递参数时,如果参数的个数比函数定义的个数少,则靠右的参数被赋值为 nil;如果传递的参数比函数定义的个数多,则多出来的值被忽略:

function func(a, b, c)
   

阅读全文…

programming in lua (2)

3-4 章。

lua 支持的数值运算符有:“+”(加),“-”(减),“*”(乘),“/”(除),“^” (指数),“%”(求余),“-”(取相反数)。“%”还有取特定精度的作用,例如“x%1”表示取 x 的整数部分,而“x%0.01”则取到小数点后两位。

关系运算符:“<”,“”,“<=”,“=”,“==”,“~=”(不等于)。

逻辑运算符:“and”,“or”,“not”。

连接操作符:“..”(将两个字符串连接起来)。

运算符的优先级从高到低排列,同一行的运算符优先级相同,按出现的位置从左往右结合:

^
not # -(取相反数)
* / %
+ -
..
< > <= >= ~= ==
and
or

实在记不清的话加括号就行了。

table 的初始化使用“{}”或者在“{}”中包含初始值:

letters = {"a", "b", "c", "d", 

阅读全文…

programming in lua (1)

《programming in lua》第二版第 1-2 章。

运行环境

这里使用的 lua 版本是 5.1.4,操作系统是 debian 6.0,

到 lua 的官网下载源码包,因为是 ANSI C 写成的解析器,所以在各个平台上编译都很方便。编译之后会在源码目录里的 src 下生成两个可执行文件:lua 和 luac,其中 lua 用来解析脚本,luac 用来把脚本编译成二进制文件。在源码包里也带有一些例子,在 test 目录下。例如可以用下面的命令来运行 test 下的例子(假设当前目录为解压后的源码根目录):

./src/lua test/hello.lua

或者使用 luac 把脚本转换成二进制文件:

./src/luac test/hello.lua

默认的输出文件是 luac.out。接着可以使用 lua 来运行这个二进制文件:…

阅读全文…