Lua 基础教程(九)函数
hudson 译 原文
函数是一组语句,一起执行完成一个任务。可以将代码分成不同的函数。如何将代码划分为不同的函数取决于你自己,但从逻辑上讲,划分通常是唯一的,因此每个函数执行特定的任务。
Lua语言提供了许多内置方法(函数),程序可以调用这些方法。例如, print()方法在控制台打印传递的参数 。
函数有各种不同的名称,有的称为方法、子程序或过程等等。
定义一个函数
Lua编程语言中函数定义的一般形式如下 -
optional_function_scope function function_name(argument1, argument2, argument3........, argumentn)
function_body
return result_params_comma_separated
end
定义由函数头和函数体组成。下面是具体描述:
- 可选的函数作用域 - 可以使用关键字
local来限制函数的作用域,或者忽略作用域部分,使其成为全局函数。 - 函数名称 - 这是函数的实际名称。函数名称和参数列表一起构成函数签名。
- 参数 - 参数类似于占位符。当调用函数时,x需要将值传递给参数。这个值被称为实际参数或参数。参数列表指的是参数类型、顺序和数量。参数是可选的;也就是说,一个函数可以不包含参数。
- 函数体 - 函数体包含一系列语句,定义了其功能。
- 返回 - 在Lua中,可以通过在
return关键字后跟逗号分隔的返回值来返回多个值。
示例
以下是一个名为max()的函数的源代码。这个函数接受两个参数num1和num2,并返回两者之间的最大值 :
--[[ 返回两个数字中的最大值的函数 --]]
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中,可以将函数分配给变量,也可以将它们作为另一个函数的参数传递。下面是一个简单的示例,展示如何在Lua中将函数赋值给变量,并作为参数传递:
myprint = function(param)
print("这是我的打印函数 - ##",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