当前位置: 首页 > 工具软件 > Lua Fun > 使用案例 >

lua 函数

范嘉
2023-12-01

lua 函数

        

              

                                   

函数

           

语法格式

function_scope function function_name( argument1, argument2, argument3, ...)
    function_body
    return result_params_comma_separated
end

       

相关说明

function_scope:函数作用域,全局或者local,不设置默认为全局
function:函数声明
function_name:函数名,可选,如不设置表示匿名函数
argument:函数参数,可选

return result, ...:函数可返回多个值,多个值之间用逗号间隔
                    如果函数没有返回值,可不带return语句

         

              

                                   

函数名称

        

示例:有名称函数

Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
-- 定义函数fun,函数无返回值
> function fun() print('瓜田李下') end

-- 调用函数fun
> fun()
瓜田李下

          

示例:匿名函数

Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
-- 定义匿名函数,将其赋值给fun2
> fun2=function() print('海贼王') end

-- 通过fun2调用匿名函数
> fun2()
海贼王

        

                

                                   

函数参数

       

示例:没有参数

Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
-- 函数没有参数
> function fun() print('瓜田李下') end

-- 调用函数
> fun()
瓜田李下

              

示例:固定个数参数

Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
-- 有2个参数
> function fun(a,b) print(a,b) end

-- 调用函数
> fun(1,2)
1	2

          

示例:变长参数

Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
-- 将变长参数参数传给pairs遍历:pairs{...}(注意是大括号)
> function fun(...) for key,value in pairs{...} do print(key,value) end end

-- 调用函数
> fun(1,2,3,4,5,6)
1	1
2	2
3	3
4	4
5	5
6	6

-- 先将变长参数赋值给表t,然后遍历表
> function fun2(...) t={...} for key,value in pairs(t) do print(key,value) end end

-- 这种传参会报错
> fun2(1,2,3,4,5,6,key='瓜田李下',key2='海贼王')
stdin:1: ')' expected near '='

-- 这种传参合法
> fun2(1,2,3,4,5,6,'瓜田李下','海贼王')
1	1
2	2
3	3
4	4
5	5
6	6
7	瓜田李下
8	海贼王

         

示例:固定参数、变长参数混合传参

Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
-- 固定参数、变长参数混合使用
> function fun(a,b,...) t={a,b,...} for key,value in pairs(t) do print(key,value) end end

-- 调用函数
> fun(1,2)
1	1
2	2

        

              

                                   

select 函数

     

select('#', ...):获取变长参数的长度

select(index, ...):返回从index开始向后的参数

       

示例:输出select(index, ...)返回结果

huli@hudeMacBook-Pro ~ % cat test.lua
function fun(...)
  a={...}
  print('#a',#a)
  print("select('#',a)", select('#',a))
  print("select('#',...)", select('#',...))
  for i=1, select('#',...) do
     print(select(i,...))
  end
end

fun(1,2,3,4,5,6)
huli@hudeMacBook-Pro ~ % lua test.lua
#a	6
select('#',a)	1
select('#',...)	6
1	2	3	4	5	6
2	3	4	5	6
3	4	5	6
4	5	6
5	6
6

            

示例:使用select遍历输出变长参数

huli@hudeMacBook-Pro ~ % cat test2.lua
function fun(...)
  print(select('#',...))
  for i=1, select('#',...) do
     local a= select(i,...)   --将第一个返回值赋值给a
     print(a)
  end
end

fun(1,2,3,4,5,6)
huli@hudeMacBook-Pro ~ % lua test2.lua
6
1
2
3
4
5
6

       

             

                                   

函数返回值

        

示例:无返回值

Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
-- 函数没有返回结果
> function fun() print('瓜田李下') end

-- 将fun()的结果赋值给a:先执行fun()函数
> a=fun()
瓜田李下

-- 查看a的值:nil
> a
nil

         

示例:返回单个结果

Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
-- 函数返回单个结果
> function fun() return 1 end

-- 调用函数,将结果赋值给a
> a=fun()

-- 查看a的值:1
> a
1

        

示例:函数返回多个结果

Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
-- 函数返回3个结果
> function fun() return 1,2,3 end

-- 调用函数,将函数返回结果依次赋值给a、b、c
> a,b,c=fun()

-- 查看a、b、c的值
> a 
1
> b
2
> c
3

         

             

 类似资料: