Dans elixir, on pourrait définir la fonction "somme" de deux manières différentes:
def sum, do: 0
def sum(a), do: a
def sum(a, b), do: a + b
def sum(a, b, c), do: a + b + c
ou
def sum() do 0 end
def sum(a) do a end
def sum(a,b) do a + b end
def sum(a,b,c) do a + b+ c end
Je peux même mélanger les deux approches:
def sum() do 0 end
def sum(a) do a end
def sum(a,b) do a + b end
def sum(a,b,c), do: a + b + c
Mes questions sont les suivantes: pourquoi y a-t-il deux façons de parvenir au même résultat? Le second est-il préféré dans le cas des fonctions en ligne? Quels sont les avantages de l'un ou de l'autre?
Merci d'avance!
Le do...end
format est le sucre syntaxique pour le do:
format.
Cela vaut non seulement aux fonctions, aussi if
, case
, cond
, etc.
case 1, do: (1 -> "a")
contre
case 1 do
1 -> "a"
end
En général, le do...end
format est préféré à moins que les définitions de fonction ne soient suffisamment courtes pour tenir sur une seule ligne.
do
dans ce cas est en fait un paramètre dans une liste de mots clés. L'implémentation de la if
macro ressemble à quelque chose comme:
do_clause = Keyword.get(clauses, :do, nil)
else_clause = Keyword.get(clauses, :else, nil)
Cela obtient les expressions à l'intérieur du do...else...end
bloc:
if foo do
#this gets stored in do_clause
else
#this gets stored in else_clause
end
Notez que l'implémentation de if
a légèrement changé, vous pouvez voir la version à laquelle je fais référence à https://github.com/elixir-lang/elixir/blob/1a7412502fd581da8ef1378fcd5a057ab96378f7/lib/elixir/lib/kernel.ex#L2294
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots