Lua函数
函数是一组一起执行任务的语句。可以把代码放到独立的函数中。怎么划分代码功能之间的不同,但在逻辑上划分通常是让每个函数执行特定的任务。
Lua语言提供了程序可以调用大量的内置方法。例如,方法print()打印作为输入传参数在控制台中。
函数是已知的各种名称,如方法或子程序或程序等。
定义一个函数
在Lua编程语言中的方法的定义一般形式如下:
optional_function_scope function function_name( argument1, argument2, argument3..., argumentn) function_body return result_params_comma_separated end
在 Lua 编程语言的方法定义包括方法头和方法体。这里是方法的所有部件
-
可选函数适用范围:可以使用关键字本地范围的限制功能或忽略的范围部分,这将使它成为一个全局函数。
-
函数名称:这是函数的实际名称。函数名和参数列表一起构成了函数签名。
-
参数:一个参数是像占位符。当调用一个函数,将值传递给参数。这个值被称为实际参数或参数。参数列表是指类型,顺序和数量的方法的参数。参数是可选的;也就是说,方法可能没有参数。
-
函数体:方法主体包含了定义方法做什么的语句的集合。
-
返回:在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
函数参数:
如果一个函数使用参数,它必须声明接受的参数值变量。这些变量被函数的形式参数调用。
正式的参数表现得就像在函数内部其他本地变量和在进入函数创建并在退出时销毁。
调用函数:
当创建一个Lua函数,给什么样的功能,必须做一个定义。要使用一个方法,将不得不调用该函数来执行定义的任务。
当程序调用一个函数,程序的控制转移到被调用的函数。被调用函数进行定义的任务和在执行它的return语句或当其功能的终端到达时,程序控制返回到主程序。
而调用只是需要传递所需的参数以及方法名的方法,如果方法返回一个值,那么你可以存储返回的值。例如:
function max(num1, num2) if (num1 > num2) then result = num1; else result = num2; end return result; end -- calling a function 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("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