lua函数
在lua中,函数是对语句和表达式进行抽象的主要方法.既可以用来处理一些工作,也可以用来计算一些值.lua提供了很多內建函数,你可以很方便地在程序中调用它们,如print函数可以将值打印到控制台上.
lua函数主要有两种用途:
- 完成指定的任务,这种情况下函数作为调用语句使用
- 计算并返回值,这种情况下函数作为赋值语句的表达式使用.
函数定义
lua编程语言函数定义格式如下:
optional_function_scope function function_name(argument1,argument2,argument3,...,argumentn)
function_body
return result_params_comma_separated
end
解析:
- optional_function_scope: 该参数是可选的,指定函数是全局函数还是局部函数,未设置参数默认为全局函数,设置局部函数需要使用关键字local.
- function_name: 指定函数名称.
- argument1,argument2,argument3,…,argumentn: 函数参数,可以是0个至多个,多个参数以逗号隔开.
- function_body: 函数体,函数需要执行的代码语句块.
- result_params_comma_separated: 函数返回值,可以返回多个值,多个值以逗号分隔.
单返回值
定义函数max,参数num1和num2,返回参数最大值
function max(num1,num2)
if (num1 > num2) then
result = num1
else
result = num2
end
return result
end
print('2和5的最大值为:',max(2,5))
print('5和10的最大值为:',max(5,10))
执行结果如下:
多返回值
lua函数可以返回多个结果值,比如string.find函数返回匹配字符串的开始和结束下标
lua函数中在return后列出返回值的列表即可返回多个值
可变参数
lua函数可以接收可变数目的参数,和C语言类似在参数列表中使用三点…表示函数有可变数目的参数
function add(...)
sum = 0
for i,v in ipairs({...}) do
sum = sum + v
end
return sum
end
print(add(1,2,3,4,5))
执行结果如下
我们也可以将可变参数赋值给一个变量
function average(...)
sum = 0
param = {...}
for i,v in ipairs(param) do
sum = sum + v
end
return sum/#param
end
print('平均值为:',average(1,2,3,4,5)) --计算平均值
执行结果为:
我们还可以通过select(’#’,…)来获取可变参数的数量
function average(...)
sum = 0
param = {...}
for i,v in ipairs(param) do
sum = sum + v
end
print('总共传入'..select('#',...)..'个参数')
return sum/select('#',...)
end
print('平均值为:',average(1,2,3,4,5)) --计算平均值
执行结果为:
有时候我们可能需要几个固定的参数加上可变参数,固定参数要放在变长参数之前
function testParam(param1,...)
print(param1)
print(...)
end
testParam(1,2,3,4,5)
执行结果如下:
通常在遍历变长参数的时候只需要使用{…},然而变长参数有时可能为nil,那么就可以用select来访问变长参数:select(’#’,…)或select(n,…)
- select(’#’,…):返回可变参数的数量
- select(n,…):返回n到select(’#’,…)的参数
调用select时,必选传入一个固定实参selector(选择开关)和一系列变长参数.如果selector为数字n,那么select返回它的第n个可变实参,否则只能为字符串#,这样select返回变长参数的个数
function testParam(...)
for i = 1, select('#',...) do
param = select(i,...) --param只会接收一地个参数,多余的参数会被舍弃
print('param1:',param)
print('param2:',select(i,...))
end
end
testParam(1,2,3,4,5)
执行结果如下: