J'ai défini un Foo
module comme celui-ci :
defmodule Foo do
def hello(x = %{name: name}) do
IO.inspect [x, name]
end
end
Si je lance l'application Foo.hello(%{name: "Alice"})
J'obtiens le résultat suivant :
[%{name: "Alice"}, "Alice"]
Ensuite, j'ai appris que je pouvais réécrire la Foo
sans en modifier la fonctionnalité :
defmodule Foo do
def hello(%{name: name} = x) do
IO.inspect [x, name]
end
end
Pourquoi cela est-il possible ? Qu'est-ce que le signe égal dans un paramètre de fonction ? S'agit-il d'un opérateur de correspondance normal ?
Selon moi, l'opérateur =
fait correspondre la valeur du côté droit au modèle du côté gauche.
[Editer]
Après avoir lu la réponse de Justin, j'ai posté une réponse moi-même. Mais j'ai toujours besoin d'aide.
Je souhaite savoir si le =
se comporte différemment à l'intérieur de la tête de la fonction et pourquoi.
Et je souhaite trouver une documentation officielle si elle est disponible.