文章目录

  • 一、基本知识
  • 二、函数定义
  • 1.基本语法
  • 2.示例演示
  • 三、返回值
  • 四、参数


一、基本知识

Lua 提供了许多的内建函数,你可以很方便的在程序中调用它们,如print()函数可以将传入的参数打印在控制台上。
Lua 函数主要有两种用途:
1.完成指定的任务,这种情况下函数作为调用语句使用;
2.计算并返回值,这种情况下函数作为赋值语句的表达式使用。
其实和其他语言的函数功能一样,但是感觉Lua的返回值和参数更灵敏,因为可以多返回值和可变参数。

二、函数定义

1.基本语法

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

参数解析:
(1)optional_function_scope: 该参数是可选的,表示函数是全局函数还是局部函数,未设置该参数默认为全局函数,如果你需要设置函数为局部函数需要使用关键字 local。
(2)function_name: 指定函数名称。
(3)argument1, argument2, argument3…, argumentn: 函数参数,多个参数以逗号隔开,函数也可以不带参数。
(4)function_body: 函数体,函数中需要执行的代码语句块。
(5)result_params_comma_separated: 函数返回值,Lua语言函数可以返回多个值,每个值以逗号隔开。

2.示例演示

比如求斐波那契数列:

function fib(num)
	 local a=1
	 local b=1
	 local c=1
	 if(num <= 2) 
		  then
			   return c
		  end
	 while(num > 2)
		  do
			   c=a+b
			   a=b
			   b=c
			   num = num-1
		  end
		  return c
	 end

print("第5个斐波那契数列值为:",fib(10))

运行结果:

lua 函数 多个参数 lua的函数_变长参数

三、返回值

Lua函数允许有多个返回值,返回的时候语法如下:

return num1,num2,num3

示例演示:

lua 函数 多个参数 lua的函数_Lua_02


可见,Lua函数可以返回多个返回值而且允许返回值不被接收完。

下面自己写一个多返回值的函数:

function fib(num)
	 local a=1
	 local b=1
	 local c=1
	 if(num <= 2) 
		  then
			   return c
		  end
	 while(num > 2)
		  do
			   c=a+b
			   a=b
			   b=c
			   num = num-1
		  end
		  return c
	 end

print("第5个斐波那契数列值为:",fib(10))		  

function fib_2(num1,num2,fibfunction)
	 local a=fib(num1)
	 local b=fib(num2)
	 return a,b
end

a,b=fib_2(3,4,fib)
print("第3个和第4个斐波那契数列为:",a,b)

运行结果:

lua 函数 多个参数 lua的函数_Lua_03

四、参数

Lua 函数可以接受可变数目的参数,和 C 语言类似,在函数参数列表中使用三点 … 表示函数有可变的参数。

function average(...)
	 local a=0
	 table1={...}
	 for i,v in ipairs(table1)
		  do
			   a=a+v

		  end
	 local sum=#table1--求参数个数
	 return a/sum
end

print(average(2,2,4,4))

运行结果:

lua 函数 多个参数 lua的函数_Lua_04


通常在遍历变长参数的时候只需要使用 {…},然而变长参数可能会包含一些 nil,那么就可以用 select 函数来访问变长参数了:select(’#’, …) 或者 select(n, …)

select(’#’, …) 返回可变参数的长度。

select(n, …) 用于返回从起点 n 开始到结束位置的所有参数列表。

调用 select 时,必须传入一个固定实参 selector(选择开关) 和一系列变长参数。如果 selector 为数字 n,那么 select 返回参数列表中从索引 n 开始到结束位置的所有参数列表,否则只能为字符串 #,这样 select 返回变长参数的总数。

function fun(...)
	 print("传入了"..select('#',...).."个参数")
	 table1={select(4,...)}
	 print("从第4个参数开始向后是:")
	 for i,v in ipairs(table1)
		  do
			   print(v)
		  end
	 print("table1中索引为6的和索引为7的内容为:")
	 print(table1[6],table1[7])
end

print("当传入10个参数,且第8个为nil时:")
fun(1,2,3,4,5,6,7,nil,9,10)

运行结果:

lua 函数 多个参数 lua的函数_lua 函数 多个参数_05


如上图,当使用for循环时,table1[5]内容是nil,for循环直接到这里停止执行,但是table1还是有内容没有打印出来,table1[5]=nil , table1[6]=9 , table1[7]=10

是因为for循环遇到内容nil就停下来了