Lua学习笔记(3)——Lua语句

Lua

本文介绍了Lua的基本语句,并依次介绍了Lua程序的顺序结构和控制结构。

1. 顺序结构

1.1. 赋值

除了普通的用“=”赋值之外,Lua还允许多重赋值,每个值和每个变量之间用逗号分隔。Lua总会将等号右边值的个数调整到与左边变量个数一致,若值个数少了,则多余的变量将赋予nil;若值个数多了,则多余的值会被丢弃。a, b = 10, 2 * xx, y = y, x(交换)。多重赋值一般用于交换两个变量的值,或者接受一个函数的多个返回值。

1.2. 局部变量与程序块

相对于全局变量,Lua还提供了局部变量,给变量加上限定词local即可。局部变量的作用域仅限于声明它们的那个程序块(如控制结构的执行体、函数等)。

注意,在交互模式中每行输入内容自身就形成了一个程序块,因此单句local声明没有效果。可以显式界定一个块,将内容放入一对do-end关键字中即可,这个方法也可以用于严格控制某些局部变量的作用域。

有一种习惯写法local foo = foo,创建一个局部变量foo并用全局变量foo的值初始化它。若后续其他函数改变全局变量foo的值,可以在这里先将其保存起来。

2. 控制结构

所有控制结构语句都有一个显示的终止符:if、for、和while以end结尾,repeat以until结尾。

2.1. if then else(elseif)语句

格式:if <条件1> then <内容1> elseif <条件2> then <内容2> else <内容3> end

Lua中不支持switch语句,所以一连串if elseif语句是很常见的。

2.2. while和repeat语句

格式:while <条件> do <循环体> end

格式:repeat <循环体> until <条件>

在Lua中,一个声明在循环体内的局部变量的作用域包括循环的条件测试。

2.3. 数字型for语句

格式:for var=exp1, exp2, exp3 do <循环体> end

上式表示var从exp1变化到exp2,以exp3作为步长递增var。其中exp3是可选的,若不指定则默认步长为1。如果将exp2设为math.huge,则为无限循环。

有一些细节需要注意。for的3个表达式是在循环开始前一次性求值的,以后将不再求值。另外,控制变量会被自动地声明为for语句的局部变量,仅在循环体内可见。

2.4. 泛型for语句

泛型for循环通过一个迭代器来遍历所有值,如for i,v in ipairs(tableA) do print(v) end,其中i被赋予索引值,而v被赋予对应的元素值。其中ipairs(array)函数用于遍历数组并返回数字下标-元素值对,pairs(table)函数用于遍历table并返回键-值对,string.gmatch(string)迭代字符串中的单词。

泛型for的一个应用是创建逆向table,即新table的键值与原table键值反转。

2.5. break和return语句

这两个语句都用于跳出当前的语句块,break结束一层循环,return结束一个函数的执行。如果刚定义了一个function然后直接要在一开始就跳出函数作为调试用,可以用一个显示的do块来包含return语句,即function foo() do return end end

参考文献:电子工业出版社《Lua程序设计(第2版)》第4章

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器