x,y = y,x --变量交换 a[i], a[j] = a[j], a[i] -- 值的个数小于变量的个数 x, y, z = 1, 5 -- z = nil x, y = 1, 5, 8 -- x = 1, y = 5
x = 10 local i = 1 while i < x do local x = i * 2 print(x) -- 2, 4, 6 ... i = i + 1 end print(x) -- 10 if i > 20 then local x x = 20 print(x + 2) -- 22 else print(x) -- 10 end print(x) -- 10
交互模式将每一行理解为一个程序块,并当即执行,可能结果会不一样数组
显式的界定一个块
do -- code block end
尽可能使用局部变量
-- 习惯写法 local foo = foo -- 全局变量 foo 的值赋给局部变量 foo, 用来保存全局变量的值
if
if 条件表达式 then else end if a < 0 then a = 0 end if a < b then return a else return b end -- lua 不支持 switch 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
while
local i = 1 while a[i] do print(a[i]) i = i + 1 end
repeat...until
repeat line = io.read() until line ~= ""
-- 这在 lua 中是能够执行的 local sqr = x / 2 repeat sqr = (sqr + x / sqr) / 2 local error = math.abs(sqr ^ 2 - x) until error < x / 10000
数值型 for
for var = exp1, exp2, exp3 do -- 执行体 end for i = 10, 1, -1 do print(i) -- 10, 9, 8,... end
for 的细节
泛型 for
for i,v in ipairs(a) do print(v) end -- 打印 table 中的 key 值 for k, in pairs(t) do print(k) end
二种 for 类型的共同点
days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"} -- 将名称转换成它在一周中的位置,索引为字符串,值为对应的位置,方便查找,逆向 table revDays = {["Sunday"] = 1, ["Monday"] = 2 ,["Tuesday"] = 3, ["Wednesday"] = 4, ["Thursday"] = 5, ["Friday"] = 6, ["Saturday"] = 7} x = "Tuesday" print(revDays[x]) -- 3 打印 Tuesday 的位置 revDays = {} for k,v in pairs(days) do revDays[v] = k end
local i = 1 while a[i] do if a[i] == v then break -- 条件语句块中的最后一条语句 end i = i + 1 end