引言
在Lua语言中,函数(Function)是对语句和表达式进行抽象的主要方式。函数既可以用于完成某种特定任务(有时在其他语言中也称为过程(procedure)或子例程(subroutine)),也可以只是进行一些计算然后返回计算结果。
函数定义
optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)
function_body
return result_params_comma_separated
end
调用函数时使用的参数个数可以与定义函数时使用的参数个数不一致。Lua语言会通过抛弃多余参数和将不足的参数设为nil的方式来调整参数的个数。
多返回值
Lua语言中一种与众不同但又非常有用的特性是允许一个函数返回多个结果(Multiple Results)。 使用多重赋值(multipleassignment)可以同时获取到这两个结果。
[root@localhost luapros]# lua
Lua 5.3.0 Copyright (C) 1994-2015 Lua.org, PUC-Rio
> s,e=string.find("hello Lua users","Lua")
> print(s,e)
7 9
>
可变长参数函数
Lua语言中的函数可以是可变长参数函数(variadic),即可以支持数量可变的参数。
函数table.unpack
多重返回值还涉及一个特殊的函数table.unpack。该函数的参数是一个数组,返回值为数组内的所有元素。
正确的尾调用
Lua语言中有关函数的另一个有趣的特性是,Lua语言是支持尾调用消除(tail-callelimination)的。
尾调用(tail call)是被当作函数调用使用的跳转。当一个函数的最后一个动作是调用另一个函数而没有再进行其他工作时,就形成了尾调用。