(Lua 笔记):Lua函数
程序员文章站
2024-03-17 23:50:16
...
Lua 函数
- 函数定义
- 定义格式如下:
[local] function functionName(arg1,arg2,arg3.....argn) functionBody [return value1,value2.....valuen] end
- 案例1
local function max(num1,num2) if(num1>num2)then return num1 else return num2 end end print( max(1,10) )
- 案例2:函数可以作为数据赋值 可以作为参数传递
temp = max print(temp(40,3))
- 案例3:匿名函数
myprint = function (param) print("这个是我的打印函数"..param) end myprint(100)
- 案例4:函数作为参数
function add(num1,num2,printFun) local res = num1+num2 printFun(res) end add(40,50,myprint)
- 案例5:函数可以返回多个值
function maximum (a) local mi = 1 -- 最大值索引 local m = a[mi] -- 最大值 for i,val in ipairs(a) do if val > m then mi = i m = val end end return m, mi end print(maximum({8,10,23,12,5})) --23 3
- 案例6:可变参数
- 在函数参数列表中使用三点 ... 表示函数有可变的参数。
function average(...) result = 0 local arg={...} --> arg 为一个表,局部变量 for i,v in ipairs(arg) do result = result + v end print("总共传入 " .. #arg .. " 个数") return result/#arg end print("平均值为",average(10,5,3,4,5,6)) -- 总共传入 6 个数 -- 平均值为 5.5
- 有时候可能需要几个固定参数加上可变参数,固定参数必须放在变长参数之前:
function fwrite(fmt, ...) ---> 固定的参数fmt return io.write(string.format(fmt, ...)) end fwrite("gcc\n") --->fmt = "gcc", 没有变长参数。 fwrite("%d%d\n", 1, 2) --->fmt = "%d%d", 变长参数为 1 和 2 -- gcc -- 12
- 通常在遍历变长参数的时候只需要使用 {…},然而变长参数可能会包含一些 nil,那么就可以用 select 函数来访问变长参数了:
select('#', …) 或者 select(n, …)
- 调用select时,必须传入一个固定实参selector(选择开关)和一系列变长参数。
- 如果selector为数字n,那么select返回它的第n个可变实参,否则只能为字符串"#",这样select会返回变长参数的总数。例子代码:
do function foo(...) for i = 1, select('#', ...) do -->获取参数总数 local arg = select(i, ...); -->读取参数 print("arg", arg); end end foo(1, 2, 3, 4); end -- arg 1 -- arg 2 -- arg 3 -- arg 4
上一篇: 随记之对Map的Value字段进行排序
下一篇: Lua中闭包的应用