函数用于将一组语句组合起来完成一个任务。你可以将你的代码分割到不同的函数中。如何将你的代码分到不同的函数中完全由你自己决定,不过一般会按照逻辑功能进行划分,每个函数都执行一个特定的任务。
在 Lua 中提供了大量的内置函数供我们使用。例如,print() 函数用于将输入的参数输出到终端。
函数往往也被称作方法,子例程或过程等等。
函数定义
Lua 中函数定义的语法如下所示:
optional_function_scope function function_name( argument1, argument2, argument3..., argumentn) function_body return result_params_comma_separated end
Lua 中函数定义包括函数头和函数名两部分。如下列出函数的所有部分:
- 可选的函数作用域:你可以使用关键字 local 限制函数的作用域,你也可以忽略此部分而使用默认值。函数作用域默认是全局。
- 函数名:函数的真正名称。函数名与函数的参数列表一起被称为函数签名。
- 参数:一个参数就一个占位符一样。函数调用时,把值传递给参数。这个值被称之为实际参数或直参数。参数列表指参数的类型,顺序与数量。参数是可选的,一个函数可以没有参数。
- 函数体:函数体是代码语句集合,定义了函数的功能。
- 返回:在 Lua 中,可以使用 return 关键字同时返回多返回值,每个返回值之间使用逗号分隔。
示例
下面是函数 max() 源代码。此函数接受两个参数 num1 与 num2,返回两个输入参数的最大值。
--[[ function returning the max between two numbers --]] function max(num1, num2) if (num1 > num2) then result = num1; else result = num2; end return result; end
函数参数
如果函数需要用到参数,则它必须声明接受参数值的变量。这些被声明的变量被称为函数的形式参数或简称形参。
函数的形参与函数中其它局部变量一样,在函数的入口处被创建,函数结束时被销毁。
调用函数
创建函数的时候,我们已经定义了函数做什么。接下来,我们就可以调用函数来完成已定义的任务或功能。
当程序中调用一个函数时,程序的控制转移到被调用的函数中。被调用的函数执行定义的任务;当 return 语句被执行或者到达函数末尾时,程序的控制回到主程序中。
调用函数的方法很简单,你只需要将函数要求的参数传递给函数就可以实现函数的调用。如果函数有返回值,你也可以将函数的返回值存储下来。如下如示:
function max(num1, num2) if (num1 > num2) then result = num1; else result = num2; end return result; end -- 调用函数 print("The maximum of the two numbers is ",max(10,4)) print("The maximum of the two numbers is ",max(5,6))
执行上面的代码,可以得到如下的输出结果:
The maximum of the two numbers is 10 The maximum of the two numbers is 6
赋值与传递函数
在 Lua 语言中,我们可以将函数赋值给一个变量,也可以将函数作为参数传递给另外一个函数。下面是赋值传递函数的一个例子:
myprint = function(param) print("This is my print function - ##",param,"##") end function add(num1,num2,functionPrint) result = num1 + num2 functionPrint(result) end myprint(10) add(2,5,myprint)
执行上面的代码,可以得到如下的输出结果:
This is my print function - ## 10 ## This is my print function - ## 7 ##
变参函数
在 Lua 语言中,使用 ... 作为参数可以创建参数个数可变的函数,即变参函数。我们可以使用下面的这个例子来理解变参函数的概念。下面的这个例子中函数返回输入参数的平均值:
function average(...) result = 0 local arg={...} for i,v in ipairs(arg) do result = result + v end return result/#arg end print("The average is",average(10,5,3,4,5,6))
执行上面的代码,可以得到如下的输出结果:
The average is 5.5