模式匹配在Erlang语言中具有极其重要的作用,也是Erlang独特性的一个重要方面。
模式匹配的基本形式为:
左端= 右端
其中,右端可以是一个具体的值,也可以是一个表达式;左端可以是一个简单的变量,也可以是一个由变量和原子等形式构成。“=”称为模式匹配运算符。
模式匹配的基本过程为:
1.右端部分若为表达式则应先计算表达式的值;
2.将左端的模式与右端值进行匹配:成功则绑定未曾绑定的变量,并返回模式匹配表达式的值;失败则可能会引发错误或改变程序的执行流程等。
本节首先介绍简单赋值性模式匹配
在Erlang语言中,也是可以用变量作为标志一个值的符号,并要求变量的符号必须用大写字母开头,其后只能是大小写字母、整数和下划线。
Erlang中变量是单一赋值变量。即在某一变量作用域内只能被赋值一次(更准确的应是只能被绑定一次),即变量由自由变量状态改变为绑定变量状态。否则模式匹配失败,同时也不会对变量进行绑定。
下面举例说明简单赋值性模式匹配,如图所示:
三个执行的语句都是最简单的模式匹配语句:
1.先计算右端7+2的值,结果为9,之后将9与自由变量X进行模式匹配,X是自由变量,所以将X绑定为9,并匹配成功,最后返回模式匹配表达式的值9。
2.对X=9进行模式匹配时,X已经绑定为9,而右端的值正好也是9,所以模式匹配成功。但X已绑定,所以模式匹配时并不进行绑定。最返回模式匹配表达式的值9。
3.对X=4进行模式匹配时,X已经绑定为9,而右端的值为4,所以模式匹配失败。Erlang给出了“**exception error: no match of right hand side value 4”模式匹配失败的提示。
注:在Erlang的交互式环境中,使用f(X)可以把变量X由绑定变量状态改变为自由变量状态,方便进行调试。