Lua——函数


一、基本知识

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函数允许有多个返回值,返回的时候语法如下:

return num1,num2,num3

示例演示:
在这里插入图片描述
可见,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 函数可以接受可变数目的参数,和 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))


运行结果:
在这里插入图片描述
通常在遍历变长参数的时候只需要使用 {…},然而变长参数可能会包含一些 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)

运行结果:
在这里插入图片描述
如上图,当使用for循环时,table1[5]内容是nil,for循环直接到这里停止执行,但是table1还是有内容没有打印出来,table1[5]=nil , table1[6]=9 , table1[7]=10
是因为for循环遇到内容nil就停下来了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孟小胖_H

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值