Pourquoi y a-t-il deux façons de définir des fonctions nommées dans elixir?

Santiago Ignacio Poli

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!

Des gaz

Le do...endformat 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...endformat est préféré à moins que les définitions de fonction ne soient suffisamment courtes pour tenir sur une seule ligne.

dodans ce cas est en fait un paramètre dans une liste de mots clés. L'implémentation de la ifmacro 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...endbloc:

if foo do
  #this gets stored in do_clause
else
  #this gets stored in else_clause
end

Notez que l'implémentation de ifa 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.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Pourquoi y a-t-il deux façons d'indiquer une erreur dans Elixir?

Pourquoi y a-t-il deux types de fonctions dans Elixir?

Pourquoi y a-t-il deux façons de multiplier des nombres signés arbitraires dans MIPS?

Pourquoi y a-t-il deux façons de déclarer des variables dans Go, quelle est la différence et laquelle utiliser?

Pourquoi existe-t-il deux façons de désinstaller un fichier dans Git?

Pourquoi y a-t-il des résultats différents avec ces deux façons d'obtenir le booléen ?

Pourquoi y a-t-il deux façons de naviguer entre les fragments?

Pourquoi n'y a-t-il aucun moyen de dériver des fonctions applicatives dans Haskell?

deux façons de créer des fonctions comparées dans kotlin

Pourquoi y a-t-il deux crochets [dans les fonctions de sommet c ++?

Pourquoi y a-t-il trois façons d'obtenir le manuel dans Git?

Bonnes façons de définir des fonctions à l'intérieur de la fonction dans R

Façons de définir et d'utiliser des fonctions partiellement liées

Combien y a-t-il de façons de déclarer un float dans Rust ?

Y a-t-il des différences entre ces deux façons de créer un tableau?

Deux façons de définir des méthodes dans React, quelle est la différence ?

Existe-t-il un équivalent à __MODULE__ pour les fonctions nommées dans Elixir / Erlang?

Pourquoi existe-t-il deux façons d'appeler une fonction par pointeur?

Pourquoi y a-t-il () ou des parenthèses à la fin des spécifications de type des fonctions d'élixir?

Pourquoi kotlin a-t-il des fonctions componentN dans la classe de données, s'ils ont déjà des getters et des setters?

Existe-t-il un moyen de définir directement des fonctions dans un dictionnaire?

Y a-t-il une différence entre ces deux façons d'utiliser foreach?

Existe-t-il plusieurs façons de définir la valeur du bean et de les enregistrer dans la base de données à l'aide de PersistentObject

Pourquoi existe-t-il 2 façons de créer une tâche dans Gradle?

Pourquoi n'y a-t-il pas d'erreur de compilation lorsque les fonctions 'string' sont utilisées sur une variable de type de champ 'any' dans TypeScript?

Dans Elixir, y a-t-il des raisons d'efficacité entre chaque structure de cas ?

Pourquoi y a-t-il des problèmes / confusion avec les types de données variables entre les fonctions Android?

Existe-t-il maintenant deux façons d'utiliser typedef dans Dart?

Pourquoi le code résultant diffère-t-il de deux façons de déclarer une classe générique

TOP liste

  1. 1

    Comment afficher du texte au milieu de div avec une couleur d'arrière-plan différente?

  2. 2

    Modbus Python Schneider PM5300

  3. 3

    Comment faire une recherche partielle et obtenir un score pertinent dans Elasticsearch

  4. 4

    Autocomplete avec java, Redis, Recherche élastique, Mongo

  5. 5

    Comment choisir le nombre de fragments et de répliques Elasticsearch

  6. 6

    Comment utiliser HttpClient avec TOUT cert ssl, quelle que soit la « mauvaise » est

  7. 7

    Existe-t-il un moyen de voir si mon bot est hors ligne ?

  8. 8

    optimiser les opérations du serveur avec elasticsearch: traitement des filigranes de disque bas

  9. 9

    MasterService d'ElasticSearch prend trop de temps pour calculer l'état du cluster et lancer ProcessClusterEventTimeoutException

  10. 10

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  11. 11

    Quelque chose dans le cluster Elasticsearch 7.4 devient de plus en plus lent avec les délais de lecture de temps en temps

  12. 12

    Microsoft.WebApplication.targets

  13. 13

    Comment analyser un hachage Ruby plat en un hachage imbriqué?

  14. 14

    Comment changer la couleur de la police dans R?

  15. 15

    Comment créer une nouvelle application dans Dropbox avec des autorisations complètes

  16. 16

    Comment vérifier si un utilisateur spécifique a un rôle? Discord js

  17. 17

    Exporter la table de l'arborescence vers CSV avec mise en forme

  18. 18

    Résultat de l'échantillonneur JMeter : comprendre le temps de chargement, le temps de connexion et la latence

  19. 19

    Ajustement non linéaire avec R

  20. 20

    comment copier du contenu et le mettre dans un pdf nouvellement créé en utilisant iText

  21. 21

    php ajouter et fusionner des données de deux tables

chaudétiquette

Archive