Mahmud Adam
Mahmud Adam

Reputation: 3579

Variable assignment in Elixir

I have a question about variable assignment in Elixir. In Erlang, this would raise a no match of right hand side value:

X = 4.
X = 2.

However, it seems perfectly fine in Elixir to assign a value to a variable more than once. I am confused how pattern matching works in Elixir. How does Elixir differentiate between pattern matching and variable assignment? From what I understand, in Erlang, X is an unbound variable so it can be matched with anything, right? But once it is bound, pattern matching only works if it is the same value as X. So does Elixir not share the same concept of unbound variables as Erlang?

Upvotes: 10

Views: 3567

Answers (2)

Vincent Gerris
Vincent Gerris

Reputation: 7537

An attempt to actually answer the question, using knowledge from the link. Elixir does not do matching with the = operator , it does something called rebinding. The code example shows how Elixir can be made to behave like Erlang, which is completely illogical to me as a total new user of the language. I hope to revisit this answer in the future to write something better :).

So Elixir uses pattern matchin when the variable is preceded with a ^ instead of rebinding. My question is : in a big piece of code how those one keep track of first use and use this notation? It would be great if anyone can provide a good answer to that :).

Upvotes: 0

Hynek -Pichi- Vychodil
Hynek -Pichi- Vychodil

Reputation: 26131

Yes, Elixir doesn't follow the same concept as Erlang in this regard. Elixir tries to be more accessible for developers less familiar with functional programming, especially Ruby developers. According to Pattern matching documentation you have to pin variable:

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

Also, note that variables have to start with a lower case in Elixir.

Upvotes: 12

Related Questions