很多情况下我们需要做一些有规律的重复操作,以此来解放我们的劳动力,让程序代替我们完成。

逻辑如图:

Lua-循环 - 图1

while循环

  1. while(boolean)
  2. do
  3. --执行事件
  4. end

逻辑图:

画板

for循环

  1. for var=vap1,vap2,vap3 do
  2. --执行事件
  3. end

循环1-10:

  1. for i=1,f(x) do
  2. print(i)
  3. end

倒序循环1-10:

  1. for i=10,1,-1 do
  2. print(i)
  3. end

泛型for循环

泛型 for 循环通过一个迭代器函数来遍历所有值,常常用来遍历table表
  1. --打印数组a的所有值
  2. a = {"one", "two", "three"}
  3. for k, v in ipairs(a) do
  4. print(k, v)
  5. end

repeat…until循环

  1. repeat
  2. --执行事件
  3. until( boolean )
我们注意到循环条件判断语句(condition)在循环体末尾部分,所以在条件进行判断前循环体都会执行一次。

示例:

  1. a = 10
  2. repeat
  3. print(a)
  4. a = a + 1
  5. until( a > 15 )
  6. --[[
  7. 输出:
  8. 10
  9. 11
  10. 12
  11. 13
  12. 14
  13. 15
  14. ]]

值得注意的是在条件进行判断前循环体都会执行一次

  1. a = 10
  2. repeat
  3. print(a)
  4. a = a + 1
  5. until( a > 9 )
  6. --[[
  7. 输出:
  8. 11
  9. ]]

循环控制

break

break 语句插入在循环体中,用于退出当前循环或语句 如果你使用循环嵌套,break语句将停止最内层循环的执行,并开始执行的外层的循环语句。
  1. a = 10
  2. while( a < 20 )
  3. do
  4. print(a)
  5. a=a+1
  6. if( a > 15)
  7. then
  8. break
  9. end
  10. end
  11. --[[
  12. 输出:
  13. 10
  14. 11
  15. 12
  16. 13
  17. 14
  18. 15
  19. ]]

goto

goto 语句允许将控制流程无条件地转到被标记的语句处
  1. --语法格式
  2. goto Label
  3. --Label格式
  4. :: Label ::

简单使用:

  1. local a = 1
  2. ::label:: print("goto label")
  3. a = a+1
  4. if a < 3 then
  5. goto label -- a 小于 3 的时候跳转到label
  6. end
lable 中设置多个语句:
  1. i = 0
  2. ::s1:: do
  3. print(i)
  4. i = i+1
  5. end
  6. if i>3 then
  7. os.exit() -- i 大于 3 时退出
  8. end
  9. goto s1
实现 continue:
  1. for i=1, 3 do
  2. if i <= 2 then
  3. print(i, "yes continue")
  4. goto continue
  5. end
  6. print(i, " no continue")
  7. ::continue::
  8. print([[i'm end]])
  9. end