Lua极简入门(六)——函数的参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lua极简入门(六)——函数的参数相关的知识,希望对你有一定的参考价值。

参考技术A 函数定义完成后,那么函数的调用方式,完成的功能,以及返回值都将固定。此时就剩下调用了,对于调用函数,只需要关注参数,并按要求设置参数,并接收返回值,这样函数的整个流程就完成了。

在Lua中,支持可变参数定义,即在函数使用过程中,传递的参数是可以变化的,可不传、传递一个、两个等等。比如需要计算一组数字的累加,那么数字的个数是不固定的。通常会定义一个函数,接收一个 table ,将不固定的数字存储到 table 中,并作为实参传入到函数中,实现累加需求:

函数定义完成后,在使用之前,先将数字添加到一个 table 中,之后完成调用

以上按传统的方式实现了不固定数字的累加函数定义。对于Lua,可以使用可变参数的定义方法,完成不固定数字累加的方法,这种实现及调用时更加方便,毕竟不用在声明 table 并组织参数:

上面Lua的可变参数定义,与传统函数(参数为 table )定义方式相比,基本上一致,只是将参数 table 变更为了 ... 三个点。虽然函数定义时,没有太大变化,但是在调用时,将完全不同。

三个点 ... 作为表达式,可以在函数中直接使用,但在使用时,会将所有的可变参数全部返回。

在定义函数过程中,可变参数也可以和固定位置的参数混用,但可变参数必须在最后位置。

在前面,已经使用可变参数 ... 作为表达式,将其值全部返回,并赋给新的变量;也可以将可变参数转为数组 ... ,并遍历使用可变参数。Lua在这两种读取可变参数之外,还提供了 select 函数,用于访问变长参数。该函数的定义方式为 select(index,...) ,即第一个位置为固定参数,值包含两种取值: number 和 # ,如果传递数值,则表示获取可变参数指定位置的参数,如果为 # ,则返回可变参数的长度;第二个参数为可变参数本身,仍使用 ... 表示。

上述中,无法使用 table 获取到传递的 nil 。为了解决这个问题,可以使用 select 以便获取参数总长度,以及指定位置的参数。

可变参数,在使用过程中,当作为表达式时,完全等价于原始可变参数,因此可变参数,在一些需要记录日志时,有着非常良好的应用场景,比如类似于Spring切面记录日志的方式,可以使用Lua的可变参数来进行模拟

在Python中,有一种关键词参数,在调用时允许使用关键字对参数进行限定,并提供必要的检查手段,对于程序的扩展,有着良好的作用,如下:

在Lua中,并不具备命名参数的功能,但是可以使用 table 进行模拟实现,并且当参数只有一个时,Lua允许直接跟 table ,因此从实用上可以实现类似的效果。

以上是关于Lua极简入门(六)——函数的参数的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 极简入门Helloworld版服务器例子

Solidity极简入门#3. 函数类型

Solidity极简入门#29. 函数选择器Selector

极简 Node.js 入门 - 2.4 定时器

Solidity极简入门#22. Call

Solidity极简入门#2. 数值类型