跳转到内容

Erlang 编程/模式匹配

来自 Wikibooks,开放世界中的开放书籍

← 术语 | 表达式 →

Erlang 使用强大的模式匹配将变量绑定到值。模式匹配可以是显式的,例如当使用 =(模式匹配运算符)时,也可以是隐式的,例如当函数调用被处理并且函数的实际参数与它的形式参数匹配时。

模式看起来与术语相同 - 它们可以是简单的字面量,如原子和数字,复合的,如元组和列表,或者两者的混合。它们还可以包含变量,它们是字母数字字符串,以大写字母或下划线开头。一个特殊的“匿名变量”_(下划线)用于你不关心要匹配的值,并且不会使用它。

如果模式与要匹配的术语具有相同的“形状”,并且遇到的原子相同,则模式匹配成功。例如,以下匹配成功:[1]

  • A = 1.
  • 1 = 1.
  • {ok, A} = {ok, 42}.
  • [H|T] = [1, 2, 3].

注意,在第四个示例中,管道 (|) 表示列表的头部和尾部,如 术语 中所述。

这些匹配失败

  • 1 = 2.
  • {ok, A} = {failure, "不知道问题"}.
  • [H|T] = [].

在模式匹配运算符的情况下,失败会产生错误,并且进程退出。如何在 错误 中捕获和处理错误。

模式用于选择要执行的函数的哪个子句(这将在 函数 中介绍;在 case 表达式中选择哪个选项 (表达式);以及从邮箱中检索哪些消息 (进程)。

Erlang 变量是单赋值变量,不需要声明。它们用大写字母或下划线后跟字母数字序列来编写。它们使用模式匹配机制绑定到值。如果使用未绑定的变量,Erlang 编译器将产生错误,如果使用绑定的变量,则会发出警告。有时你可能会遇到 _Var 变量。此变量被绑定并包含一个值,但它会抑制关于未使用的绑定变量的编译器警告。

  1. 由于 Erlang 变量是不可变的,所以将这些示例视为独立的——即使 A 被使用了两次,但每次都是一个不同的A
华夏公益教科书