欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

(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
相关标签: Lua学习笔记