İksir - Örüntü Eşleştirme

Örüntü eşleştirme, Elixir'in Erlang'dan miras aldığı bir tekniktir. Listeler, tuplelar, haritalar vb. Gibi karmaşık veri yapılarından daha basit alt yapıları çıkarmamızı sağlayan çok güçlü bir tekniktir.

Bir maçın 2 ana bölümü vardır, left ve bir rightyan. Sağ taraf, her türden bir veri yapısıdır. Sol taraf, sağ taraftaki veri yapısını eşleştirmeye ve soldaki herhangi bir değişkeni sağdaki ilgili altyapıya bağlamaya çalışır. Bir eşleşme bulunmazsa, operatör bir hata verir.

En basit eşleşme, soldaki tek bir değişkendir ve sağdaki herhangi bir veri yapısıdır. This variable will match anything. Örneğin,

x = 12
x = "Hello"
IO.puts(x)

Bir alt yapıyı yakalayabilmek için değişkenleri bir yapının içine yerleştirebilirsiniz. Örneğin,

[var_1, _unused_var, var_2] = [{"First variable"}, 25, "Second variable" ]
IO.puts(var_1)
IO.puts(var_2)

Bu değerleri saklayacak, {"First variable"}içinde VAR_1 ve"Second variable"içinde VAR_2 . Ayrıca özel bir_ diğer değişkenler gibi çalışan ancak iksire söyleyen değişken (veya '_' ile başlayan değişkenler) "Make sure something is here, but I don't care exactly what it is.". Önceki örnekte, _unused_var böyle bir değişkendi.

Bu tekniği kullanarak daha karmaşık kalıpları eşleştirebiliriz. İçinexample Listede bulunan bir listenin içindeki bir sayıyı açmak ve almak istiyorsanız, aşağıdaki komutu kullanabilirsiniz -

[_, [_, {a}]] = ["Random string", [:an_atom, {24}]]
IO.puts(a)

Yukarıdaki program aşağıdaki sonucu üretir -

24

Bu bağlayacak a '_' kullandığımız için diğer değerler göz ardı edilir.

Örüntü eşleştirmede, üzerinde bir değişken kullanırsak rightdeğeri kullanılır. Soldaki bir değişkenin değerini kullanmak istiyorsanız, pin operatörünü kullanmanız gerekir.

Örneğin, 25 değerine sahip bir "a" değişkeniniz varsa ve bunu 25 değerine sahip başka bir "b" değişkeniyle eşleştirmek istiyorsanız, o zaman şunu girmeniz gerekir -

a = 25
b = 25
^a = b

Son satır şu anki değerle eşleşiyor a, atamak yerine, değerine b. Eşleşmeyen bir sol ve sağ taraf kümesine sahipsek, eşleştirme operatörü bir hata verir. Örneğin, bir demeti bir listeyle veya boyut 2 listesini boyut 3'ün bir listesiyle eşleştirmeye çalışırsak, bir hata görüntülenir.