-- 与C语言类似,在函数参数列表中使用三点...表示函数有可变的参数 functionadd(...) local s=0 for i,v inipairs{...} do-- 注意这里是{},{...}表示一个由所有变长参数构成的table(这里实质是一个数组) s=s+v end return s end print(add(3,4,5,6,7)) -- 输出:25
-- 可变参数也可以赋值给一个变量 functionaverage(...) result=0 localarg={...} -- arg为一个table,局部变量 for i,v inipairs(arg) do result=result+v end print("总共传入 " .. #arg .. " 个数") -- #也可以用于计算table中的元素个数 return result/#arg end print("平均值为",average(10,5,3,4,5,6))
-- 也可以通过select("#",...)来获取可变参数的数量 functionaverage(...) result = 0 localarg={...} for i,v inipairs(arg) do result = result + v end print("总共传入 " .. select("#",...) .. " 个数") -- 等价于#arg return result/select("#",...) end print("平均值为",average(10,5,3,4,5,6))
-- 也可能同时需要固定参数和可变参数 functionfwrite(fmt,...) returnio.write(string.format(fmt,...)) end
-- select函数 do functionfoo(...) for i = 1, select('#', ...) do-- 获取参数总数 localarg = select(i, ...); -- 读取第i个可变实参 print("arg", arg); end end foo(1, 2, 3, 4); end