文章目录
- 一、基本知识
- 二、函数定义
- 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函数允许有多个返回值,返回的时候语法如下:
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就停下来了