Erlang : Retour d'une fonction
J'ai une fonction dans laquelle j'ai une série de cas individuels consolidés.
case ... of
...
end,
case ... of
...
end,
...
etc.
Je veux le retour de la fonction immédiatement lorsqu'un cas particulier de la condition se produit dans l'un des cas énoncés de sorte que la prochaine instruction case n'est pas cochée, et la fonction juste sorties/retours. Comment dois-je faire?
OriginalL'auteur jeffreyveon | 2009-12-08
Vous devez vous connecter pour publier un commentaire.
Je vous suggère de refactoriser pour exploiter la pleine puissance de Erlang et son pattern matching capacités.
Il n'y a pas un
return
de l'opérateur. Aussi, un fait peu connu est que vous pouvez faire quelque chose comme:Return=case ... of
un
case
déclaration peut avoir un "retour" de la valeur.Oui, c'est quelque chose de très bon à savoir! merci.
ma réponse satisfaire votre question?
Oui, merci, merci de m'avoir aidé à y aller avec erlang 🙂
OriginalL'auteur jldupont
Pattern matching est une bonne façon de revoir une instruction de cas - vous pouvez faire quelque chose comme ceci
et puis votre cas simplement roulés jusqu'à:
(X sera soit passed1, passed2, passedlarge ou defaultcase dans cet exemple artificiel)
OriginalL'auteur Alan Moore
Erlang n'ont pas de
return
de l'opérateur. Vous aurez besoin de revoir votre code en petites fonctions.Votre code original a deux cas expressions enchaîné avec l'opérateur virgule. Je présume que vous avez des effets secondaires dans le premier cas, l'expression que vous souhaitez conserver. Ci-dessous, je suis en utilisant un imaginaire
return
opérateur:Une expression de ce genre peut être converti à la vraie Erlang code à l'aide de petites fonctions et le pattern matching avec quelque chose ressemblant à ceci:
Avertissement: Cela fait 10 ans que j'ai écrit Erlang code, de sorte que ma syntaxe est peut-être éteint.
Exemple ajouté, j'espère que cela aide.
OriginalL'auteur Ville Laurikari
En Erlang vous suffit d'utiliser le pattern matching pour déclencher la fonction appropriée. Si vous avez trop de clauses de couvrir et de les traiter avec je vous suggère aussi de revoir un peu le code.
OriginalL'auteur markmywords
Une façon est d'cascade votre cas déclarations:
Une autre est de séparer votre cas énoncés dans les clauses:
OriginalL'auteur Zed
utilisation attraper/lancer
L'appelant dit:
puis écrire
Cela est généralement considéré comme une mauvaise programmation de la pratique depuis que le programme a plusieurs
les points de sortie et il est difficile de grock
En principe, il pourrait être une approche valable, et c'est en effet pour les non-local de rendement, mais il est toujours une mauvaise pratique de l'utiliser partout dans votre code. À l'aide de non-local retourne rend très difficile pour les autres programmeurs à comprendre le code, et le rend plus difficile à déboguer. Alors qu'il n'est pas conçu spécifiquement pour la gestion des erreurs la gestion des erreurs est généralement le seul endroit où vous devriez l'utiliser. En outre, si vous êtes codant pour la gestion d'erreur, vous n'êtes pas à la suite d'un noyau Erlang philosophie, qui est le "code de la réussite" : vous êtes en train de penser plus comme un impératif programmeur.
OriginalL'auteur ja.