Earlier this year I started learning Elixir but for whatever reason I didn't blog about it or write much software to document the learning process. In the past when I would learn something new I'd jump into code and build something straight away. This time around I decided to stretch myself and learn only by reading about the language, platform and ecosystem.
I'm finally making my way back to the language after a few months off and decided I would blog about my experience. I'll be reading the programming elixir 1.6 book from Dave Thomas and taking notes. Unlike my previous writing style I plan to make this go round less formal so I can focus more on the language and my journey through it.
The equals operator in Elixir is not about assignment, but rather matching. It succeeds if Elixir can find a way to make the left side equal the right side.
a = 1
Elixir can make the match true by binding the variable `a` to value 1
a = 1
1 = a
2 = a
The last statement above results in a match error. it's like asserting 2 = 1
Also, Elixir will only change the value of the variable on the left side of an equal sign.
list = [1, 2, 3]
[a, b, c] = list
Variables will bind only once per match
[a, a] = [1, 1]
[b, b] = [1, 2]
The last statement above results in a match error because `b` cannot have 2 different values.
After you assign a variable the value will never change (immutability at work). But you will find that Elixir lets you re-bind that variable.
a = 1
[a, b, c] = [3, 2, 1]
You could force Elixir not to re-bind a variable by using the pin operator.
[^a, b, c] = [3, 2, 1]
This statement would result in a match error if `a` was already assigned the value of 1
[^a, b, c] = [1, 2, 3]
This statement would NOT result in a match error if `a` was already assigned the value of 1