- 0X29 再谈循环
- Lua除了while和repeat语句还提供了一种for循环语句.
- while和repeat语句循环终止条件可以是任何逻辑表达式.其中有一些写法比较常用,而且格式化.为了方便使用,就约定了一种新的循环语句,用于简写这些写法.这种新的循环语句叫做for语句.
- Lua中的for语句有两种写法,一种是计数变量的写法,一种是迭代遍历的写法.其中的第二种将在后续章节中介绍.本节只介绍第一种写法.
- 如果我们希望一段代码执行一个给定的次数n次后就停止.就需要用到循环变量.每次执行循环时都把循环变量加1,判定是否继续进行循环的条件就是计数变量是否小于等于给定的数值n.用while语句写的,循环变量控制的循环语句如下.它会输出20行.
n=20 i=1 while i<=n do print('number:',i) i=i+1 end
- while语句版的计数循环比较繁琐.for语言版就要简明得多.它把计数变量的初始化(赋予初始值),增量,最大值合并到一起写.循环体剩余部分和while语句的基本一样.关键词while要换成for.如下所示
n=20 for i=1,n,1 do print('number:',i) end
- for语句中的计数变量初始值和上限可以随意调整.但是如果初始值大于上限,就一次循环体都不会执行.
- for语句中,每次循环的步长是可以省略的.如果省略步长则默认步长(增量)为1.例如:
for k=1,10 do print('hello') end
for j=1,10,2 do print('hello') end
for i=1,10,0.1 do print(i) end
- 如果你已经了解过局部变量相关的内容,这里应当注意,for循环中的循环变量i是一个局部变量.它的作用域仅仅限于for语句内.
- 另外对于所有的流程控制中的复合句(do-end,if,while,repeat,for).如果在这些语句中的代码块中声明local,所创建的局部变量的作用域仅仅限于这个语句内.这对应于函数定义语句中声明的局部变量的作用域仅仅在函数内.
- 最后补充一个之前一直没有介绍到的用法.return语句可以用于任何流程控制语句中.如果执行到return语句,则流程控制复合句的执行立即终止并且返回值.在交互式编程环境中可以看到这个由流程控制语句(而非函数)返回的值.
- 0X2C 表的遍历