プログラミングElixir読書メモ 第2章
第2章 パターンマッチ
「あなたの考える代入は、私の考える代入ではない」
Elixirにおける等号はマッチ演算子であって、いわゆる「代入」じゃない。
左辺と右辺が同じものであるという「表明」のようなもの。
マッチ演算子(=)
マッチ演算子によってパターンマッチを行い、マッチすれば表明が成功し、
マッチしなければ表明できずエラーになる。
同じ構造をもっていれば、= で結ぶとパターンマッチにより両辺を同じにできる。
変数に値がセットされたら、そのパターンマッチ中では変更不可能。
次のパターンマッチでは変更OK。例としては以下の様な感じ。
a = 1 # OK
1 = a # OK
2 = a # エラー
a = 2 # OK
アンダースコア(_)
アンダースコア(_)はパターンマッチの中のワイルドカード。
変数として値を補足しなくていいなら、これを使うと良い。
[1, _, _] = [1, 2, 3] # OK
ピン演算子(^)
Elixirでは変数の束縛の期限が短くて、次のマッチのときには新しい値に束縛し直せる(Erlangではできないみたい)。
現在の変数の値でパターンマッチをしたい場合には、ピン演算子(^)を使う。
a = 1 # OK
a = 2 # OK
^a = 1 # エラー!
最初は、初回の変数の表明時にピン演算子を使って、変更不可にするのかと思ったけどそうではなかった。一度表明した変数に対してピン演算子を使って、以前の値を束縛する。