2.4 LUA语言的函数
函数(function)是对语句和表达式进行封装/抽象的一种主要方式(其它还有对象、文件等),这在各种编程语言中都是相似的,Lua语言也不例外。Lua语言中,函数也是一种数据类型;作为变量,函数也是有其作用域的。函数的定义方式如下:
在上图(图中的语句为示例,仅能说明问题,不能实际运行)中我们可以看到,Lua语言中函数定义与C语言、Java语言、Matlab脚本语言等相似,我认为约束更少,简单说明如下:
(1)“local”定义函数的作用域,为可选字段(optional),同2.3节中对变量作用域的说明。
(2)“func_name”定义函数名称。
(3)“arg1, arg2”表示函数的输入参数,其数量、数据类型均可变。
(4)“-- your comments”为可选内容,是作者对程序内容的注释。
(5)“you can do something here”为函数体,是作者编写的Lua语句,完成指定的操作;当然也可以什么都不写,这样函数运行时就不会进行任何操作。
(6)“return the result1, result2”为可选内容,其数量、数据类型均可变;如果返回的数据超过1个,就为多返回值的情况,可以应用在变量的多重赋值中。
在Lua语言中,函数以2种形式完成任务:(1)输入可有可无;在函数中完成指定的操作;返回可以有,但不关注,以语句的形式调用。(2)一般有输入(也可以在函数内产生);在函数内进行数据处理;将需要的结果返回,以表达式(赋值语句)的形式调用。
以下给出示例,可以体会一下两种形式的区别。
在Lua语言中,函数的输入参数(包括数量与类型)可以是不固定的,这在实际应用中具有极大的便利性。具体使用方法参见下图。
在Lua语言中,连接字符串的操作符为“..”,但这个操作符为双元操作符,有其使用局限。我们可以尝试自己创建一个连接字符串的函数,上图中所示的函数即实现了这个功能。在这个函数中,利用“…”来表示可变参数;“{…}”为包含所有输入参数的一个表(数组),将其赋值给“args”后,通过对“args”中全部元素的逐一拼接实现了不定数量字符串的拼接。
在此基础上,还可以有“固定参数+可变参数”的形式,但固定参数需要放在可变参数之前。对于函数string_concat(),如果有必要在可变输入参数之前加一个固定参数“separator”。
热门跟贴