【Lua基础系列】之类型与值 (函数Function)
大家好,我是Lampard~~
欢迎来到Lua基础系列的博客
PS:本博客知识参考资料为:《Lua程序设计第四版》,该书由Lua的创始人2018年所编著,所以大家可以放心去吸收知识
前文再续,书接上一回。
今天要接着讲Lua中的基本类型Function。
函数--Function
在Lua语言中,函数(Function)是对语句和表达式进行抽象的一种方式。函数调用时都需要使用一对圆括号把参数列表括起来。几时被调用的函数不需要参数,也需要一堆空括号()。唯一的例外是,当函数只有一个参数且该参数是字符串常量或表构造器{}时,括号是可选的。
print "Hello World" -- 相等于print(“Hello World”)
type {} -- 相等于type({})
正如我们已经在其他示例中看到的一样,Lua语言中的函数定义的常见语法格式如下:
function add(a) -- 声明add这个函数
local sum=0 -- 实现序列a的求和
for i=1,#a do -- 循环体
sum=sum+a[i]
end
return sum -- 返回值
end
在这种语法中,一个函数定义具有一个函数名(name,本例中的add),一个参数组成的列表和由一组语句组成的函数体。参数的行为与局部变量的行为完全一致,相当于一个用函数调用时进行初始化的局部变量。
调用函数时,使用的参数个数与定义函数时使用的参数不一致。Lua语言会通过抛弃多余的参数以及将不足的参数设为nil的方式来调整参数的个数。
(1)多返回值
Lua语言中一种与众不同但又非常有用的特性是允许一个函数返回多个结果,只需要在return关键字后列出所有要返回的值即可。例如一个用于查找序列中最大元素的函数可以同时返回最大值以及该元素的位置:
当函数作为一条单独语句使用时,其所有值均会被抛弃。当函数被作为表达式(例如加法操作数)调用时,将只保留第一个返回值。
function foo ()
return "a","b"
end
x,y = foo() -- x="a",y="b"
x = foo() -- x="a"
x,y,z=foo() -- x="a",y="b",z=nil
(2)可变长参数
Lua语言中的函数可以是可变长参数函数(variadic),即可以支持数量可变的参数。
下面是一个简单的示例,该函数返回所有参数的总和:
参数列表中的三个点表示该函数的参数是可变长的。当这个函数被调用时,Lua内容会把它的所有参数收集起来,三个点是作为一个表达式来使用的。在上例中,表达式{...}的结果是一个由所有可变长参数组成的列表,该函数会遍历该列表来累加。
-- 我们可以通过以下这几种方式进行对变化参数的调用
local Array{...} -- 把它变成一个表
#{...} -- 取得当前变化参数的个数
select{i,...} -- 通过select方法取得第i个变化参数的值
OK,今天的博客就到这里,谢谢大家!!!