Lua中的循环、分支、方法
循环
Lua提供了4种循环方式 , 与其他语言的循环基本一样 , 只是语法上有一些区别 :
循环类型 | 描述 |
---|---|
while | 每次循环前检查条件 , 条件为true时继续执行循环 , 条件为false时退出循环 |
for | 由for的控制语句决定是否继续执行循环体 |
repeat-until | 重复执行循环 , 直到条件为真时退出循环 |
嵌套循环 | 各种循环体可用嵌套使用 |
Lua提供了2种循环控制语句 , 与其他语言的控制语句基本一样 , 但是Lua没有continue :
控制语句 | 描述 |
---|---|
break | 退出当前循环 |
goto | 将程序的控制点转移到一个标签处 |
while循环
语法 : while(条件表达式) do 循环体 end
其中条件语句可以使用()包围 , 也可以不使用 .
数值for循环 (numerical)
语法 : for <var> = <strat>, <end>, [<step>] do 循环体 end
<var>
: 循环变量 .<strat> <end>
: 循环变量的遍历区间 , 是一个闭区间 (循环变量的值在两端时都会进入循环体)<step>
: 循环变量遍历的步长 , 缺省值为1 .
for循环中的三个表达式在循环开始前一次性求值 , 之后便不再求值 .
因此若表达式中出现的变量在循环体中被修改了 , 也不会影响到循环体 .
<strat> <end>
表示的是一个闭区间[strat, end] , 因此也可以直接使用一个闭区间代替 .
泛型for循环 (generic)
语法 : for <var> = in <迭代函数>, [<状态常量>], [<控制变量>] do 循环体 end
<var>
: 循环变量列表 ;<迭代函数>
: 用于遍历集合 , 后面的状态常量和控制变量会自动传给迭代函数 ;<状态常量>
: 用于控制循环 , 缺省nil , 通常不指定由迭代函数指定 ;<控制变量>
: 控制变量初始值 , 用于控制循环 , 缺省nil , 通常不指定由迭代函数指定 ;
若迭代函数的第一个返回值为nil则退出循环 , 否则将第一个返回值赋值给控制变量 .
repeat-until循环
语法 : repeat 循环体 until(条件表达式)
其中条件语句可以使用()包围 , 也可以不使用 .
Lua中的repeat-until循环与C/C++中的do-while循环类似 ,
二者的区别在于 : 前者的条件表达式达成时退出循环 , 后者的条件表达式达成时继续循环 .
break语句
Lua中的break语句与C/C++的break语句使用上无异 , 其用于在循环中跳出循环 .
goto语句
goto语句用于跳转到标记处 , 分为设置标记 与 跳转标记两步 .
跳转标记 : :: 标记名 ::
设置标记 : goto 标记名
使用goto语句可用实现continue的功能 :
在循环体末尾处设置 ::continue::
标记 , 在需要continue处使用 goto continue
语句.
示例 (Code/loop-cond-func/loopTest.lua)
1 | ---------- while ---------- |
输出
分支
Lua的分支语句与C/C++差不多 , 都是if-elseif-else , 区别只在于语法 .
Lua不提供swtich-case语句 .
if-else 语句
语法 : if 条件1 then 执行语句1 else if 条件2 then 执行语句2 else 执行语句3 end
其中条件语句可以使用()包围 , 也可以不使用 .
示例 (Code/loop-cond-func/functionTest.lua)
1 | -- 定义方法max(a,b)返回两数中较大者 |
输出
方法 - 关键字function
定义语法 : [local] function 方法名(参数列表) 方法体 return 返回值列表 end
Lua中的方法也是属于普通数据类型 , 因此也有全局与局部之分 , 默认是全局的 .
Lua的方法无需指定返回值类型 , 并且支持多返回值与可变参数列表 .
多返回值
Lua的方法可用返回多个结果值 , 在 return
后列出返回值列表即可 , 返回值中间用 ,
隔开 .
可变参数列表
Lua的方法支持可变参数列表 , 在参数列表中使用 ...
表示有可变的参数 .
- 使用
{...}
获得参数列表 . 传入的可变参数可视为一个table{...}
. - 使用
select('#',...)
获取参数个数 , 使用select(n,...)
获取第n个参数后的参数个数 . - 使用
arg
变量可以直接获取参数列表与参数的个数 . (仅限Lua 5.2版本之前)arg
是一个table , 最后一个元素为参数个数 , 其他元素表示参数列表 .
示例 (Code/loop-cond-func/functionTest.lua)
1 | -- 定义方法 printNum(num) 其返回传入的参数 |