模式匹配是Elixir编程的主要内容,它用于变量赋值、提取值,以及决定调用哪个函数。模式匹配会尝试匹配两个值,如果不匹配则执行特定操作。
我们先学习与=运算符有关的模式匹配。当=运算符两边的值不匹配时,它会抛出MatchError,并终止执行程序。如果匹配成功,程序将继续运行。让我们看看它是如何工作的。打开IEx会话并输入以下模式匹配表达式:
1=1匹配成功,但2=1和1=2不匹配,因为它们是不同的数字。我们再试试这个熟悉的表达式:
你可能会问:“这不就是变量赋值吗?”事实并非如此。这是模式匹配。Elixir将值1绑定到变量x使两边相等。再试试这个表达式:
值在左侧,变量在右侧,这是有效的Elixir表达式。很酷吧!之前我们把值1绑定到变量x,现在输入1=x,Elixir会检查左边的值是否等于右边。两边相等,所以它是一个有效的表达式。再看另一个例子:(www.xing528.com)
匹配失败。右侧变量的值是1,2不等于1,所以会抛出MatchError。检查=运算符两边是否相等的过程就是模式匹配。初学者可能觉得这难以理解。为了帮助你了解背后发生了什么,我给出了这个表达式的命令式编程版本:
如果x不等于 2,就抛出错误。如果把这个表达式反转过来会发生什么?
现在变量x在左边。当变量出现左边时,Elixir为了让两边匹配,会将右边表达式的值绑定到变量。现在我们给变量x绑定了新值2,这称为重新绑定。如果不希望重新绑定,可以使用锁定(pin)运算符: ^。该运算符通过使用变量的值进行匹配来避免重新绑定。我们来尝试一下:
使用锁定运算符后,Elixir会用变量的值进行匹配。使用=运算符可以检查运算符两边的值是否匹配。如果不匹配,程序会停止执行。如果你习惯了其他编程语言中的变量赋值,那么要理解=不仅仅是绑定变量可能要花些时间。你可以做一个代数类比:如果x=1,则1=x是有效的。模式匹配还能用来检查和提取各种类型的数据,从而解决更复杂的问题。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。