Lua 函数

本文介绍了Lua中的函数概念和使用,包括无参数无返回值、有参函数、有返回值函数的定义与调用。讲解了Lua函数的特点,如动态类型、多返回值以及变长参数等,并探讨了函数嵌套和闭包的概念。此外,还指出了Lua不支持函数重载这一特性。
摘要由CSDN通过智能技术生成

1、概念

在Lua中,函数是对语句和表达式进行抽象的主要方法。既可以用来处理一些特殊的工作,也可以用来计算一些值。

Lua 提供了许多的内建函数,你可以很方便的在程序中调用它们,如print()函数可以将传入的参数打印在控制台上。

Lua 函数主要有两种用途:

1.完成指定的任务,这种情况下函数作为调用语句使用;
2.计算并返回值,这种情况下函数作为赋值语句的表达式使用。 

基本写法

function 函数名()
end

还有一种特殊写法

a(变量)=function()
end

我感觉像lua这种随便的语言,写起来爽了,维护起来就要疯了0.0
在这里插入图片描述

2、操作

2.1 无参数无返回值
--无参数无返回值
--跟C#不一样,lua是从上到下执行的,不能在一个函数之前调用函数
function F1()
	print("函数被调用")
end

F1()

还有另外一种写法

--这种写法可以把它理解为把名字提前写了(不完全是)
--有点类似于C#中的委托和事件,通过赋值的形式去等于一个函数
F2 = function()
	print("F2函数被调用")	
end
F2()

在这里插入图片描述

注意:跟C#不一样,lua是从上到下执行的,不能在一个函数之前调用函数(会报错)
因为lua是解释型语言,使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行。是代码在执行时才被解释器一行行动态翻译和执行,而不是像编译型语言在执行之前就完成翻译。
在这里插入图片描述

2.2 有参函数
--有参函数
--函数类型不指定,可以传任意的参数进去
function F1(a)
	print(a)
	end
F1(1)
F1('666')
F1(true)
F1(nil)
--像下面这两个操作这放在C#中肯定会报错
F1()--不会报错 只会补空nil 或者丢弃
F1(6,6,6)--不报错,传入参数与函数参数不匹配,取第一个参数
2.3 有返回值函数
--有返回值函数
function F2(a)
	return a
end
Temp = F2(666)
print(Temp)

在这里插入图片描述
我们再来搞点骚操作
我们return多个参数,但lua只返回了读取的第一个参数,相当于其他参数都被丢弃了
在这里插入图片描述
如果我们想要多个返回值
正确写法

function F2(a)
	return a,"123",true
end
--多返回值时 在前面申明多个变量来接取即可
--就一一对应了,在声明变量的时候也可以,比如a=1,b=2 ,直接写成a,b=1,2
Temp,temp2,temp3 = F2(666)
print(Temp)
print(temp2)
print(temp3)

在这里插入图片描述
总结一下
就是这个语言太随便了

  • 多返回值时,在前面申明相对应的变量来接取就行
  • 如果变量不够,不报错,直接接取对应位置的返回值(后面的都不要了)
  • 如果变量多了,不报错,直接赋值nil
2.4 获取函数类型
F3 = function ()
	print('lua真随便')
end

print(type(F3))
2.5 函数的重载(Lua不支持)
--lua不支持函数的重载
--函数名相同,参数类型不同或者参数个数不同叫函数的重载
--lua会默认调用最后声明的函数
--举个例子
function F4()
	print('hello')
end

function F4(str)
	 print('Bye')
end
F()

在这里插入图片描述

2.6变长函数
--变长参数
--通过for循环把传进函数的参数都打印出来
function F5( ... )
	nums={...}
	for i=1,#nums do
		print(nums[i])
	end
end

F5(1,2,3,4,5,6)
print('--------------------------------------')
F5(6,"hello",true,nil)--不同参数也可以打印

#nums的作用
在这里插入图片描述

在这里插入图片描述

2.6函数嵌套
--函数嵌套
function F6()
	return function ()
		print('嵌套函数')
	end
end

F7 = F6()
F7()

在这里插入图片描述


--闭包

--外部传进来的这个x实际上会产生一个临时变量,我们把这个X包裹到了function (y) return x+y  end这个函数里面
--相当去在这改变了传入参数的	生命周期
function F8(x)
	return function (y)
		return x+y
	end
end

F9 = F8(2)--按理说这个F8(2)执行完毕就没有用了,但我们改变了函数的生命周期,把那个2放到了function (y)这个函数里面去了
print(F9(1))--F9实际上执行的是 function (y)这个函数

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值