ElixirにはPin演算子があって、その挙動を少し頭に入れるために簡単なcase文をつくってみました。
Pin演算子は、変数の再代入を防ぐ、という役割を持ちます。
以下は引数として与えられた a が、
SamplePin.pin1(a)ではcase文ではb=10が再代入されるSamplePin.pin2(a)ではcase文でb=10が再代入されず、パターンマッチされる
という例です。
Erlangの流れを持ちますが、再代入が許容されるElixirでの再代入という副作用を防ぐ手段ですね。
defmodule SamplePin do
@moduledoc """
Checking Pin operation
"""
@doc """
Display "when a" always.
You can learn "a ->" is always true.
"""
def pin1(a) do
b = 10
case b do
a -> IO.puts "when a. #{a}"
^a -> IO.puts "when ^a. #{a}"
_ -> IO.puts "when _."
end
end
@doc """
Display "when ^a" only you provide 10 as argument.
Others, display "when _".
"""
def pin2(a) do
b = 10
case b do
^a -> IO.puts "when ^a. #{a}"
_ -> IO.puts "when _."
end
end
end