1.控制结构
if/for/while -----> end
until -------> repeat
lua中除了false和nil之外,其他值均为true。
2.if then else
其中的else部分可有可无。
if a < 0 then a = 0 end
if a < b then return a else return b end
if line > MAXXLINES then
showpage()
line = 0
end
以及嵌入的elseif语句:
if opt == "+" then
r = a + b
elseif op == "-" then
r = a - b
elseif op == "*" then
r = a * b
else
error("invalid operation")
end
3.while
local i = 1
while a[i] do
print(a[i])
i = i + 1
end
4.repeat语句
重复执行直到条件为真
repeat
line = io.read()
until line ~= ""
print(line)
5.for语句
(1) numeric for 结构如下:
for var = exp1, exp2, exp3 do
something
end
其中exp3为步长,没有指定时默认为1。且所有表达式只被执行一次。
--其中f(x)只被执行一次
for i=1,f(x) do print(x) end
for i=10,1,-1 do print(i) end
保存下标:
--find a value in a list
local found = nil
for i = 1, a.n do
if a[i] == value then
found = i -- save value of i
break
end
end
print(found)
(2) generic for 结构
--print all values of array "a"
--数组,使用表结构,只是下标采用数字
for i,v in ipairs(a) do print(v) end
其中i指的索引,而v指的是索引对应的值。
下面的程序将遍历表中所有的key值:
--print all keys of table 't'
for k in pairs(t) do print(k) end
具体用法
days = {"Sunday", "Monday", "Tuesday", "Wednesday","Thursday", "Friday", "Saturday"}
revDays = {}
for i, v in ipairs(days) do
revDays[v] = i
end
--得到的revDays形式如下:
revDays = {["Sunday"] = 1, ["Monday"] = 2,
["Tuesday"] = 3, ["Wednesday"] = 4,
["Thursday"] = 5, ["Friday"] = 6,
["Saturday"] = 7}
6.break/return
http://www.lua.org/pil/4.4.html
文档中说需要将break/return写在一个block中的
最后一条语句(这里不太理解,先保留)。
local i = 1
while a[i] do
--break is the last statement of then block
if a[i] == v then break end
i = i + 1
end
加上return可以避免某些语句块的执行。
function foo ()
return ----SYNTAX ERROR
--'return' is the last statement in the next block
do return end ----OK
... -------statements not reached
end