Elixir - Coincidencia de patrones
La coincidencia de patrones es una técnica que Elixir hereda de Erlang. Es una técnica muy poderosa que nos permite extraer subestructuras más simples de estructuras de datos complicadas como listas, tuplas, mapas, etc.
Un partido tiene 2 partes principales, una left y un rightlado. El lado derecho es una estructura de datos de cualquier tipo. El lado izquierdo intenta hacer coincidir la estructura de datos del lado derecho y vincular cualquier variable de la izquierda a la subestructura respectiva de la derecha. Si no se encuentra una coincidencia, el operador genera un error.
La coincidencia más simple es una variable solitaria a la izquierda y cualquier estructura de datos a la derecha. This variable will match anything. Por ejemplo,
x = 12
x = "Hello"
IO.puts(x)
Puede colocar variables dentro de una estructura para poder capturar una subestructura. Por ejemplo,
[var_1, _unused_var, var_2] = [{"First variable"}, 25, "Second variable" ]
IO.puts(var_1)
IO.puts(var_2)
Esto almacenará los valores, {"First variable"}en var_1 y"Second variable"en var_2 . También hay un especial_ variable (o variables con el prefijo '_') que funciona exactamente como otras variables pero dice elixir, "Make sure something is here, but I don't care exactly what it is.". En el ejemplo anterior, _unused_var era una de esas variables.
Podemos emparejar patrones más complicados usando esta técnica. porexample si desea desenvolver y obtener un número en una tupla que está dentro de una lista que a su vez está en una lista, puede usar el siguiente comando:
[_, [_, {a}]] = ["Random string", [:an_atom, {24}]]
IO.puts(a)
El programa anterior genera el siguiente resultado:
24
Esto unirá a a 24. Otros valores se ignoran ya que estamos usando '_'.
En la coincidencia de patrones, si usamos una variable en el right, se utiliza su valor. Si desea utilizar el valor de una variable de la izquierda, deberá utilizar el operador de alfiler.
Por ejemplo, si tiene una variable "a" que tiene un valor de 25 y desea que coincida con otra variable "b" que tiene un valor de 25, debe ingresar
a = 25
b = 25
^a = b
La última línea coincide con el valor actual de a, en lugar de asignarlo, al valor de b. Si tenemos un conjunto de lados izquierdo y derecho que no coinciden, el operador de coincidencia genera un error. Por ejemplo, si intentamos hacer coincidir una tupla con una lista o una lista de tamaño 2 con una lista de tamaño 3, se mostrará un error.