if

单个if 分支

  1. x=1
  2. if x>0 then
  3. print("x is a positive number")
  4. end

多个分支if

  1. x=-1
  2. if x>0 then
  3. print("x is a positive number")
  4. else
  5. print("x is a negative number")
  6. end

输出结果

  1. x is a negative number

elseif

  1. a = -1
  2. if a > 0 then
  3. print("a is positive")
  4. elseif a <0 then
  5. print("a is negative")
  6. else
  7. print("a is zero")
  8. end

while

  1. x = 1
  2. sum = 0
  3. while x<=100 do
  4. sum = sum+x
  5. x =x+1
  6. end
  7. print(sum) -- 输出5050

repeat

执行repeat循环体后,直到util的条件为真才结束

  1. repeat
  2. sum = sum + x
  3. x = x + 1
  4. until x > 100
  5. print(sum) -- 输出5050

for

  1. sum = 0
  2. for i = 1, 100 do
  3. sum = sum + i
  4. end
  5. print(sum) -- 输出5050

偶数相加

  1. sum = 0
  2. for i = 0, 10,2 do
  3. sum = sum + i
  4. end
  5. print(sum) -- 30

迭代器

  1. a = {"a","b","c","d"}
  2. for i,v in ipairs(a) do
  3. print("index=",i,"value=",v)
  4. end

Lua的基础库提供了ipairs和pairs,两者都能用来遍历集合。两个的区别是
pairs可以遍历集合中所有的key。

  1. array={"a","b","c"}
  2. for k,v in pairs(array) do
  3. print(k,v)
  4. end

打印结果是

  1. 1 a
  2. 2 b
  3. 3 c

ipairs仅仅遍历值,按照索引升序遍历,索引中断就停止遍历。遇到nil就退出,它只能遍历到集合中出现的第一个不是整数的key。

  1. array={"a","b","c"}
  2. array[2]=nil
  3. for k,v in ipairs(array) do
  4. print(k,v)
  5. end

打印结果

  1. 1 a

自定义迭代

  1. for 变量列表 in 迭代函数,状态变量,控制变量 do
  2. 循环体
  3. end

1.调用迭代函数,把状态变量和控制变量当做参数传递给迭代函数,状态变量只会在第一次调用的时候赋值
2.如果迭代函数的返回值为nil,退出for循环。如果不是nil的话,把返回值赋值给变量列表,并执行循环体

eg

  1. function square(state, control)
  2. if (state <= control) then
  3. return nil
  4. else
  5. control = control + 1
  6. return control, control * control
  7. end
  8. end
  9. for i, j in square, 4, 0 do
  10. print(i, j)
  11. end

打印结果

  1. 1 1
  2. 2 4
  3. 3 9
  4. 4 16