Lua的条件语句控制结构

Lua支持下列控制结构:

if
while
repeat
for
break
return

if

if-then-end:

x = 10
if x > 0 then
    print("x is a positive number")
end

if-then-else-end

x = 10
if x > 0 then
    print("x is a positive number")
else
    print("x is a non-positive number")
end

if-then-[elseif-then...]-else-end

score = 90
if score == 100 then
    print("Very good!Your score is 100")
elseif score >= 60 then
    print("Congratulations, you have passed it,your score greater or equal to 60")
--此处可以添加多个elseif
else
    print("Sorry, you do not pass the exam! ")
end

while

注意Lua中没有continue语句, 只有break语句可以在循环结构中使用。

x = 1
sum = 0

while x <= 5 do
    sum = sum + x
    x = x + 1
end
print(sum)  -->output 15

repeat

可以在循环结构中使用break

x = 10
repeat
    print(x)
until false    -- 一直false,死循环

for

for分数值for(numeric for)和范型for(generic for)。

numeric for

数值for,就是设定一个开始数值,按照指定的跨度递增,直到结束值:

for i = 1, 5 do       -- 从1增长到5,默认每次增加1
  print(i)
end

for i = 1, 10, 2 do   -- 从1增长到10,明确设置每次增加2
  print(i)
end

如果跨度是负数,则递减:

for i = 10, 1, -1 do  -- 从10递减到1,每一次减去1
  print(i)
end

generic for

范型for,就是用于迭代器(iterator):

local a = {"a", "b", "c", "d"}
for i, v in ipairs(a) do
  print("index:", i, " value:", v)
end

ipairs()是遍历数组的迭代器函数,i是索引值,v是索引对应的数值。

for支持的迭代器还有:

io.lines         迭代每行
paris            迭代table
ipairs           迭代数组元素
string.gmatch    迭代字符串中的单词

ipairs是直接迭代,而pairs是调用元方法__pairs,如果没有设置该原方法,则用next函数取下一个数值。

在 LuaJIT 2.1 中,ipairs() 函数是可以被 JIT 编译执行的,而 pairs() 则只能被解释执行。

break

break用于终止循环。

return

return用于从函数中返回结果,在函数中使用return的时候,需要用do-end

local function foo()
    print("before")
    do return end
    print("after")  -- 这一行语句永远不会执行到
end