Elisir - Pattern Matching

Il pattern matching è una tecnica che Elixir eredita da Erlang. È una tecnica molto potente che ci consente di estrarre sottostrutture più semplici da strutture di dati complicate come elenchi, tuple, mappe, ecc.

Una partita ha 2 parti principali, a left e a rightlato. Il lato destro è una struttura dati di qualsiasi tipo. Il lato sinistro tenta di far corrispondere la struttura dei dati sul lato destro e associa eventuali variabili a sinistra alla rispettiva sottostruttura a destra. Se non viene trovata una corrispondenza, l'operatore genera un errore.

La corrispondenza più semplice è una variabile solitaria a sinistra e qualsiasi struttura dati a destra. This variable will match anything. Per esempio,

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

È possibile posizionare le variabili all'interno di una struttura in modo da poter catturare una sottostruttura. Per esempio,

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

Questo memorizzerà i valori, {"First variable"}in var_1 e"Second variable"in var_2 . C'è anche uno speciale_ variabile (o variabili con prefisso '_') che funziona esattamente come le altre variabili ma dice a elisir, "Make sure something is here, but I don't care exactly what it is.". Nell'esempio precedente, _unused_var era una di queste variabili.

Possiamo abbinare modelli più complicati usando questa tecnica. Perexample se vuoi scartare e ottenere un numero in una tupla che si trova all'interno di una lista che a sua volta è in una lista, puoi usare il seguente comando:

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

Il programma di cui sopra genera il seguente risultato:

24

Questo legherà a a 24. Gli altri valori vengono ignorati poiché si utilizza "_".

Nel pattern matching, se usiamo una variabile nel file right, viene utilizzato il suo valore. Se vuoi usare il valore di una variabile a sinistra, dovrai usare l'operatore pin.

Ad esempio, se hai una variabile "a" con valore 25 e desideri abbinarla a un'altra variabile "b" con valore 25, devi inserire -

a = 25
b = 25
^a = b

L'ultima riga corrisponde al valore corrente di a, invece di assegnarlo, al valore di b. Se abbiamo un insieme non corrispondente di lato sinistro e destro, l'operatore di corrispondenza genera un errore. Ad esempio, se proviamo a far corrispondere una tupla con un elenco o un elenco di dimensione 2 con un elenco di dimensione 3, verrà visualizzato un errore.