Al escribir funciones en Elixir, podemos hacer uso de un estilo asertivo con la coincidencia de patrones:
def read_file() do
{:ok, contents} = File.read("hello.txt")
contents
end
La coincidencia de patrones se realiza de forma explícita con el operador de coincidencia, =/2.
La coincidencia tiene éxito cuando la forma de los datos del lado izquierdo del operador coincide con el lado derecho.
Cuando la coincidencia tiene éxito, las variables del lado izquierdo se vinculan con los valores del lado derecho.
Usar un guion bajo, _, nos permite ignorar los valores en esos lugares.
{:ok, number, _} = {:ok, 5, [4.5, 6.3]}
number
# => 5 is bound to this variable
El operador pin ^ se puede usar para evitar volver a vincular una variable y, en su lugar, hacer coincidir el patrón con su valor actual.
number = 10
{:ok, ^number, _} = {:ok, 5, [4.5, 6.3]}
# => ** (MatchError) no match of right hand side value: {:ok, 5, [4.5, 6.3]}
La coincidencia de patrones también puede aparecer en el encabezado de una cláusula de función, de modo que solo los argumentos que coincidan con el patrón invocarán la función.
Las variables se pueden vincular en la coincidencia de patrones de una cláusula de función.
defmodule Example do
def named_function(:a = atom_variable) do
{atom_variable, 1}
end
end
Example.named_function(:a)
# => {:a, 1}
# The first function clause matches, so it is invoked
Example.named_function(:b)
# => ** (FunctionClauseError) no function clause matching in Example.named_function/1