控制语句
if 语句
if a < 0 then a = 0 end;
等价于
if (a < 0) {a = 0};
if else 语句
if a < b then return a else return b end;
等价于
if (a < b) return
else return b;
end
else if 语句
if op == "+" then
r = a + b
elseif op == "-" then
r = a - b
elseif op == "*" then
r = a * b
elseif op == "/" then
r = a / b
else
error("invalid operation")
end
Lua 不支持 switch 语句!!!
循环语句
while 循环
local i = 1
while a[i] do
print(a[i])
i = i + 1
end
repeat-until 语句
重复执行其循环体直到条件为真时结束。条件判断是在循环体之后做的,因此循环体至少执行一次。
值得注意的是,在Lua中,一个声明在循环体中的局部变量的作用域包括了判断条件!
local sqr = x/2;
repeat
sqr = (sqr + x/sqr) / 2;
local error = math.abs(sqr^2 - x)
until error < x/10000 --判断条件内仍可以
数字型 for (numeric for)
for a = exp1, exp2, exp3 do
<执行体>
end
a 从 exp1 变化到 exp2,每次变化都以 exp3 作为步长递增 a,并执行一次 “循环体”。exp3是可选的,若不指定的话,会将步长默认为1.
泛型 for (for in)
通过一个迭代器函数来遍历所有值:
-->打印数组a的所有值
local a = {1,2,3,4,5,6}
for i = 1, #a, 1 do print(a[i]) end;
pairs 和 ipairs 区别:
local tb = {
[1] = "good",
[3] = "hello",
[5] = "world"
}
for k, v in pairs(tb) do
print(k, v);
end
——输出结果——
1 good
5 world
3 hello
for k, v in ipairs(tb) do
print(k, v);
end
——输出结果——
1 good
pairs 可以遍历表中所有的 key,并且除了迭代器本身以及遍历表本身还可以返回 nil 。
但是 ipairs 则不能返回 nil ,只能返回数字 0,如果遇到 nil 则退出。它只能遍历到表中出现的第一个不是整数的 key 。
注意 pairs 遍历表中所有的key不是按顺序来的 ! ! ! ! ! ! !
如果想按顺序输出则如下:
local tb = {
"good",
"hello",
"world"
}
for k, v in ipairs(tb) do
print(k, v);
end
——输出结果——
good
hello
world