Elixir-pattern-matching
Elixir-パターンマッチング
パターンマッチングは、ElixirがErlangから継承する手法です。 これは、リスト、タプル、マップなどの複雑なデータ構造からより単純な下位構造を抽出できる非常に強力な手法です。
マッチには、2つの主要部分、*左*および*右*があります。 右側は、あらゆる種類のデータ構造です。 左側は、右側のデータ構造と一致させ、左側の変数を右側のそれぞれの下位構造にバインドしようとします。 一致が見つからない場合、オペレーターはエラーを発生させます。
最も単純な一致は、左側の孤立した変数と右側の任意のデータ構造です。 この変数は何にでも一致します。 例えば、
x = 12
x = "Hello"
IO.puts(x)
部分構造をキャプチャできるように、構造内に変数を配置できます。 例えば、
[var_1, _unused_var, var_2] = [{"First variable"}, 25, "Second variable" ]
IO.puts(var_1)
IO.puts(var_2)
これにより、値が保存されます、 \ {"最初の変数"} は_var_1_に、 "2番目の変数" は_var_2_に。 また、特別な '' 変数(または接頭辞が の変数)があります。これは、他の変数とまったく同じように機能しますが、エリクサーに指示します。 前の例では、__ unused_var_はそのような変数の1つでした。
この手法を使用して、より複雑なパターンを照合できます。 *例*では、リスト内にあるリスト内にあるタプル内の数値をアンラップして取得する場合、次のコマンドを使用できます-
[_, [_, {a}]] = ["Random string", [:an_atom, {24}]]
IO.puts(a)
上記のプログラムは、次の結果を生成します-
24
これにより、 a が24にバインドされます。 「_」を使用しているため、他の値は無視されます。
パターンマッチングでは、 right で変数を使用すると、その値が使用されます。 左側の変数の値を使用する場合は、ピン演算子を使用する必要があります。
たとえば、値25の変数「a」があり、値25の別の変数「b」と一致させる場合は、次のように入力する必要があります-
a = 25
b = 25
^a = b
最後の行は、 b の値に割り当てるのではなく、 a の現在の値と一致します。 一致しない左右のセットがある場合、一致演算子はエラーを発生させます。 たとえば、タプルとリスト、またはサイズ2のリストとサイズ3のリストを一致させようとすると、エラーが表示されます。