(Lua 笔记):Lua函数

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

猜你喜欢

转载自blog.csdn.net/baidu_41388533/article/details/108489525
LUA