Lua函数

函数

在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

你可能感兴趣的:(Lua函数)