【Lua】语法笔记#2

控制语句

  • 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;

pairsipairs 区别:

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

你可能感兴趣的:(lua)