Lua 函数

函数用于将一组语句组合起来完成一个任务。你可以将你的代码分割到不同的函数中。如何将你的代码分到不同的函数中完全由你自己决定,不过一般会按照逻辑功能进行划分,每个函数都执行一个特定的任务。

在 Lua 中提供了大量的内置函数供我们使用。例如,print() 函数用于将输入的参数输出到终端。

函数往往也被称作方法,子例程或过程等等。

函数定义

Lua 中函数定义的语法如下所示:

1
2
3
4
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,返回两个输入参数的最大值。

1
2
3
4
5
6
7
8
9
10
11
--[[ 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 语句被执行或者到达函数末尾时,程序的控制回到主程序中。

调用函数的方法很简单,你只需要将函数要求的参数传递给函数就可以实现函数的调用。如果函数有返回值,你也可以将函数的返回值存储下来。如下如示:

1
2
3
4
5
6
7
8
9
10
11
12
13
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))

执行上面的代码,可以得到如下的输出结果:

1
2
The maximum of the two numbers is 	10
The maximum of the two numbers is 6

赋值与传递函数

在 Lua 语言中,我们可以将函数赋值给一个变量,也可以将函数作为参数传递给另外一个函数。下面是赋值传递函数的一个例子:

1
2
3
4
5
6
7
8
9
10
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)

执行上面的代码,可以得到如下的输出结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
This is my print function -   ##	10	##
This is my print function - ## 7 ##
```

## 变参函数

Lua 语言中,使用 ... 作为参数可以创建参数个数可变的函数,即变参函数。我们可以使用下面的这个例子来理解变参函数的概念。下面的这个例子中函数返回输入参数的平均值:

```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))

执行上面的代码,可以得到如下的输出结果:

1
The average is	5.5

折叠的效果是

1
2
3
4
npm i hexo-renderer-markdown-it --save
npm i markdown-it-checkbox
npm i markdown-it-imsize
npm i markdown-it-expandable
 点击折叠

这是被隐藏的内容

表情Hello 😄

这是一个使用 markdown-it-emoji 的例子。

你好,世界!🌎

  • 👍 这是一个赞的 emoji

  • ✨ 这是一个闪光的 emoji

  • :octocat: 这是一个 GitHub 的 mascot,章鱼猫

公式

3x1+(1+x)2\sqrt{3x-1}+(1+x)^2

×B1cEt=4πcjE=4πρ×E+1cBt=0B=0\begin{array}{c} \nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} & = \frac{4\pi}{c}\vec{\mathbf{j}} \nabla \cdot \vec{\mathbf{E}} & = 4 \pi \rho \\ \nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} & = \vec{\mathbf{0}} \\ \nabla \cdot \vec{\mathbf{B}} & = 0 \end{array}

::: tips
提示
这是一个提示
:::

::: warning
注意
这是一个警告
:::

::: danger
警告
这是一个危险信号
:::

::: success
成功
这是一个成功信号
:::