2016-12-07 136 views
9

我有一个关于Elixir中变量赋值的问题。在二郎,这将提高no match of right hand side valueElixir中的变量赋值

X = 4. 
X = 2. 

然而,似乎在药剂完全正常的值赋给超过一次的变量更多。我很困惑模式匹配如何在Elixir中起作用。 Elixir如何区分模式匹配和变量赋值?据我所知,在Erlang中,X是一个未绑定的变量,所以它可以与任何东西匹配,对吧?但一旦绑定,模式匹配只有在与X的值相同时才起作用。那么Elixir不会像Erlang那样分享与未绑定变量相同的概念吗?

回答

12

是的,Elixir在这方面并不遵循与Erlang相同的概念。 Elixir试图让那些不太熟悉函数式编程的开发人员更容易访问,特别是Ruby开发人员。据Pattern matching文档,你必须针变量:

iex(1)> x=4 
4 
iex(2)> ^x=2 
** (MatchError) no match of right hand side value: 2 

另外,还要注意变量必须开始与药剂较低的情况下。

+3

http://blog.plataformatec.com.br/2016/01/comparing-elixir-and-erlang-variables/文章是对这种行为背后原因的很好的解释。 – michalmuskala