Lua学习笔记-函数

 

1.函数声明语法:

function func_name (arguments-list)
statements-list;
end;

 

首先说明一点,lua中函数是第一类值,和其他的类型(table,number,boolean等)一样,所以可以作为函数的参数,table的键和值。

 

2.函数调用

 直接使用函数名称调用,参数按照形参表里面依次匹配,如果实参多于形参,则多余实参被丢弃;如果实参少于形参,那么剩下的形参会被赋值为nil。

function f(a, b) 
return a, b 
end

CALL  PARAMETERS
f(3)  a=3, b=nil
f(3, 4)  a=3, b=4
f(3, 4, 5) a=3, b=4  (5 is discarded)

 

另外函数调用时如果参数为字符串或者表构造时,可以不写括号,用法如下。吐槽一下,这点设计看似方便,实则是阅读代码的灾难。实际上多打一对括号并不会花很多力气,但是代码的阅读性看起来就好很多了。

function func(string)
print(string)
end

func "123"
func {1,2,3}

输出结果
123
table: 008DB3B0

 

3. 多返回值

 这点较为简单,需要注意的是如果调用的时候在函数加一个括号,只会返回第一个值。

function f(a, b)
return a,b
end

print(f(1,2))
print((f(1,2)))


输出结果
1    2
1

 

4. 可变参数

 Lua 函数可以接受可变数目的参数,和 C 语言类似在函数参数列表中使用三点(...)表示函数有可变的参数。Lua 将函数的参数放在一个叫 arg 的表中,除了参数以外,arg表中还有一个域 n 表示参数的个数。

function g (a, b, ...) 
end

CALL  PARAMETERS
g(3)  a=3, b=nil, arg={n=0}
g(3, 4)  a=3, b=4, arg={n=0}
g(3,4,5,6) a=3, b=4, arg={5,6;n=2}

 

5. 命名参数

 命名参数使用表传递参数,这个有点鸡肋,因为如果没有函数的说明,根本不知道参数是什么,而且函数对于参数的依赖度过高,必须进行参数判断。

 

6. 闭包

 这个具体应用还不太清楚,之后补充。

posted @ 2017-08-24 11:36  Initial_Dream  阅读(337)  评论(0编辑  收藏  举报