3.1 lua 函数
通过前两章的学习大体掌握了lua的基本语法,这部分语法和其他语言大体类似,可以说这是一门语言语法的最最基础的部分了。在接下来的部分,将学习一下带有lua特性的语法知识。
返回值
通常一个函数会返回一个返回值,比如C/C++等,也有一些语言会返回多个返回值,比如python。lua也支持多返回值。以标准库中的string.find()
函数为例,该函数会返回匹配字符串在搜索字符串中的起始位置索引,如果没匹配成功则返回nil
。
1 | #!/usr/bin/bua |
对于返回值,lua有一个特性——尽可能的调整返回值的数量以适应调用环境,具体表现为一下规则:
- 当作为调用表达式最后一个参数或者仅有的一个参数时,根据变量的数量尽可能多的返回值,当变量数目大余于返回值数目时补
nil
,当变量数小于返回值数目时从左到右依此返回,舍弃右边多余的返回值。 - 其他情况下,函数只返回第一个返回值。
总之,函数做作为最后一个参数时尽可能多返回返回值,其他情况只返回第一个返回值。
上述规则同样适用于以下情况: - 作为表达式赋值给其他变量
- 作为其他函数的参数
- 函数调用在表构造初始化时
- ruturn 参数
函数调用用在表构造初始化时需要特别说明一下:注意:如果1
2
3
4
5
6
7
8function fun_0() end
function fun_1() return "a" end
function fun_2() return "b", "c" end
a = {fun_0()} -- a = {}
b = {fun_1()} -- b = {"a"}
c = {fun_2()} -- c = {"b", "c"}
d = {fun_0(), fun_1(), fun_2(), "d"} -- d = {nil, "a", "b", "d"}return
语句中将返回值用括号包裹起来也会导致返回一个值:1
2function fun_3() return fun_2() end -- "b", "c"
function fun_4() return (fun_2()) end -- "b"
函数的定义
lua中函数是一等变量,可以通过关键字function
来进行定义。
1 | -- 和php等语言一样使用function关键字声明一个函数 |
参数
和其他语言一样,在lua中,声明一个函数可以指定固定数目的参数,这些参数不需要指定类型。
1 | local function a(a, b) |
可变参数
同样,lua也支持可变参数,使用...
来表示可变参数:
1 | local function func_a(...) |
有时,我们会遇到这样一种情况:既需要若干固定参数,但还需要可变参数。这时我们需要将固定参数列在参数列表的最左边,可变参数...
放在最右边。
1 | local function func_c(a, b, ...) |
命名参数
和其他语言一样,lua的参数和位置是相关的,函数调用时,实参会按照位置依次传递给形参。但是,有时我们记不住形参的具体位置就有麻烦了。命名参数就很好的解决了这个问题。
但是,和c++等语言的命名参数不一样,lua的命名参数是通过table来实现的。