Lua学习之函数使用

本文详细介绍了Lua语言中的函数使用,包括函数构建、多返回值、函数定义、可变参数以及强制转换。Lua函数可以返回多个结果,并在不同调用场景下自动调整返回值数量。可变参数允许函数接收不定数量的参数,而强制转换则通过括号来确保函数返回值被当作单一值处理。示例代码展示了这些特性的实际应用。
摘要由CSDN通过智能技术生成


在Lua中,函数是对语句和表达式进行抽象的主要方法。既可以用来处理一些特殊的工作,也可以用来计算一些值。
Lua 提供了许多的内建函数,可以很方便的在程序中调用它们。
Lua 函数主要有两种用途:
1.完成指定的任务,这种情况下函数作为调用语句使用;
2.计算并返回值,这种情况下函数作为赋值语句的表达式使用。

2.6.1 函数构建

Lua 编程语言函数定义格式如下:

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语言函数可以返回多个值,每个值以逗号隔开

例:Lua函数比较最大最小值

在这里插入图片描述
运行结果:
在这里插入图片描述

2.6.2 多返回值

Lua函数可以返回多个结果值,比如string.find,其返回匹配串"开始和结束的下标"(如果不存在匹配串返回nil)

例:return后列出要返回的值的列表来返回多值

在这里插入图片描述
运行结果:
在这里插入图片描述
Lua总是调整函数返回值的个数以适用调用环境,当作为独立的语句调用函数时,所有返回值将被忽略。

2.6.3 函数定义

作为表达式调用函数:当调用作为表达式最后一个参数或者仅有一个参数时,根据变量个数尽可能多的返回多个值,不足补nil,超出舍去。其他情况下,函数调用仅返回第一个值(如果没有返回值为nil)

local  a=f1()
local  b,c=f1(),f2()
local  e=f3()
print(a,b,c,d,e)

输出结果:

nil      nil      1      nil      1

作为函数参数被调用
按例分析:
1行----因为无返回值,则print会被忽略输出。
2行----输出结果的第一行对应f2()。
3行----f3()有2个结果,则输出2个结果。
4行----f1()没有输出,但在逗号前是被强制输出的,所有有nil的值都输出。
5行----有逗号间隔,逗号前被要求输出一个结果,所以f3只输出第一个返回值。

print(f1())
print(f2())
print(f3())
print(f1(),f3())
print(f1(),f3(),f2())

输出结果:

1
1       2
nil     1       2
nil     1       1

作为表构造函数的初始值

local  t1={f1()}
local  t2={f2()}
local  t3={f3()}
local  t4={f1(),f2(),f3()}
print(#t1)
print(#t2)
print(#t3)
print(#t4)

输出结果:

0
1
2
4

2.6.4 可变参数

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

function add(...)  
local s = 0  
for i, v in ipairs{...} do   --> {...} 表示一个由所有变长参数构成的数组  
s = s + v  
end  
return s  
end  
print(add(3,4,5,6,7))  --->25

例:
在这里插入图片描述
运行结果:
在这里插入图片描述

有时候我们可能需要几个固定参数加上可变参数,固定参数必须放在变长参数之前

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

select('#', …) 返回可变参数的长度
select(n, …) 用于返回 n 到 select('#',…) 的参数

调用select时,必须传入一个固定实参selector(选择开关)和一系列变长参数。如果selector为数字n,那么select返回它的第n个可变实参,否则只能为字符串"#",这样select会返回变长参数的总数
在这里插入图片描述
运行结果:
在这里插入图片描述

2.6.5 强制转换

在函数外加上括号()就能实现强制返回一个值。

function f()
     return 1,2,3
end
print(f())
print((f()))

输出结果:

1      2      3
1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值