函数
在lua中,函数是对语句和表达式进行抽象的主要方法,皆可以用来处理一些特殊的工作,也可以用来计算一些值.
主要用途:
1.完成指定的任务,函数左为语句使用
2.计算并返回值,函数左为赋值语句的表达式使用
函数定义格式:
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:函数的参数,以逗号隔开,函数可以不带参数
function_body:函数体,代码语句块
result_params_comma_separated:函数返回值,lua语言可以返回多个值,每个值逗号隔开
--判断最大的值
function max(num1,num2)
if(num1>num2) then
result = num1;
else
result = num2;
end
return result
end
print("两个最大的值是: ", max(10,28))
--结果:
--28
多返回值
lua函数可以返回多个结果值,例如:string.find("string.val.com","val") 其返回匹配串"开始和结束的下表" ,如果不存在返回nil
--求数组中最大的值和下标
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,20,30,40,51,1,5}))
--结果:
--51 5
可变参数
lua函数可以接受可变数目的参数,和c语言类似,在函数参数列表中使用三点(...)表示可变
function add(...)
local s = 0
for i,v in ipairs{...} do
s = s + v
end
return s
end
print(add(3,5,4,6));
print(add(2,3))
--结果:
--18
--5
固定可变参数
固定惨书必须放在变参数之前;
function fwrite(fmt,...)
return io.write(string.format(fmt,...))
end
fwrite("herbie\n")
fwrite("%d %d\n",3,4)
--结果:
--herbie
--3 4
通常遍历边长的参数的时候只要使用{...},然而变长参数可能包含一些nil,那么可以用select 函数来访问变量参数
方法:
1.select('#',...) 返回可变参数的长度
2.select(n,...) 访问n到 select('#',...)的参数
注意: 调用select 时,必须传入一个固定参数selector(选择开关)和一系列变长参数,如果selector为数字n,那么select返回它第n个可变参数,否则只能为字符串"#",这样select 会返回变长的总数.
function foo(...)
for i = 1,select('#',...) do
local arg = select(i,...);
print("arg",arg);
end
end
foo(1,2,3,4);
--结果:
--arg 1
--arg 2
--arg 3
--arg 4
网友评论