local pieces = {} for i, elem inipairs(my_list) do pieces[i] = my_process(elem) end local res = table.concat(pieces)
控制语句
if
1 2 3 4
x = 10 if x > 0then print("x is a positive number") end
if-else
1 2 3 4 5 6
x = 10 if x > 0then print("x is a positive number") else print("x is a non-positive number") end
if-elseif-else
1 2 3 4 5 6 7 8 9
score = 90 if score == 100then print("Very good!Your score is 100") elseif score >= 60then print("Congratulations, you have passed it,your score greater or equal to 60") --此处可以添加多个elseif else print("Sorry, you do not pass the exam! ") end
嵌套if
1 2 3 4 5 6 7 8 9 10 11 12
score = 0 if score == 100then print("Very good!Your score is 100") elseif score >= 60then print("Congratulations, you have passed it,your score greater or equal to 60") else if score > 0then print("Your score is better than 0") else print("My God, your score turned out to be 0") end--与上一示例代码不同的是,此处要添加一个end end
while
有break,无continue
1 2 3
while 表达式 do --body end
repeat
一直执行,直到条件为真
1 2 3
repeat body until 条件
for
数字 for(numeric for)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
for var = begin, finish, step do --body end
for i = 1, 5do print(i) end
-- output: 1 2 3 4 5
var从begin取到finish,左右都为闭区间
begin、finish、step 三个表达式只会在循环开始时执行一次
第三个表达式 step 是可选的,默认为 1
控制变量 var 的作用域仅在 for 循环内,需要在外面控制,则需将值赋给一个新的变量
范型 for(generic for)
泛型 for 循环通过一个迭代器(iterator)函数来遍历所有值:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
-- 打印数组a的所有值 local a = {"a", "b", "c", "d"} for i, v inipairs(a) do print("index:", i, " value:", v) end
-- output: index: 1 value: a index: 2 value: b index: 3 value: c index: 4 value: d
-- 打印table t中所有的key for k inpairs(t) do print(k) end
函数
1 2 3
functionfunction_name(arc)-- arc 表示参数列表,函数的参数列表可以为空 -- body end
Lua函数的参数大部分是按值传递的,只有传入一个表table时,会进行引用传递。
参数补齐
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
localfunctionfun1(a, b)--两个形参,多余的实参被忽略掉 print(a, b) end
localfunctionfun2(a, b, c, d)--四个形参,没有被实参初始化的形参,用nil初始化 print(a, b, c, d) end
local x = 1 local y = 2 local z = 3
fun1(x, y, z) -- z被函数fun1忽略掉了,参数变成 x, y fun2(x, y, z) -- 后面自动加上一个nil,参数变成 x, y, z, nil
-->output 12 123 ni
变长参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
localfunctionfunc( ... )-- 形参为 ... ,表示函数采用变长参数
local temp = {...} -- 访问的时候也要使用 ... local ans = table.concat(temp, " ") -- 使用 table.concat 库函数对数 -- 组内容使用 " " 拼接成字符串。 print(ans) end
func(1, 2) -- 传递了两个参数 func(1, 2, 3, 4) -- 传递了四个参数
-->output 12
1234
返回值
1 2 3 4 5 6 7 8 9 10 11 12 13 14
localfunctioninit()-- init 函数 返回两个值 1 和 "lua" return1, "lua" end
local x, y, z = init(), 2-- init 函数的位置不在最后,此时只返回 1 print(x, y, z) -->output 1 2 nil
local a, b, c = 2, init() -- init 函数的位置在最后,此时返回 1 和 "lua" print(a, b, c) -->output 2 1 lua