Lua 基础教程(九)函数

109 阅读3分钟

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()的函数的源代码。这个函数接受两个参数num1num2,并返回两者之间的最大值 :

--[[ 返回两个数字中的最大值的函数 --]]
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