2016-12-07 132 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