Erlang équivalent à si autre chose
J'ai 2 parties de code que je veux exécuter. Les deux sont des conditions
if Value1 < N do something
else if Value1 >= N do something
if Value2 < N do something
else if Value2 >= N do something
Que je veux à un énoncé de chaque à exécuter.
Comment le si le travail en erlang? il n'y a pas d'autre. J'ai utiliser plusieurs gardes, mais qui ressemble comme j'ai 4 si annuels. en groupes de 2.
if some condition
code;
if other condition
code
end.
J'obtiens une erreur de syntaxe.
source d'informationauteur jarryd
Vous devez vous connecter pour publier un commentaire.
La forme d'un
if
est:Il fonctionne en essayant les gardiens de la si-clauses dans l'ordre de haut en bas (ce qui est défini) jusqu'à ce qu'il atteigne un test qui réussit, alors le corps de cette clause est évaluée et le
if
expression renvoie la valeur de la dernière expression dans le corps. Ainsi, leelse
peu dans d'autres langues est cuit. Si aucun des gardes réussit ensuite unif_clause
d'erreur est généré. D'un commun fourre-tout de la garde est justetrue
qui réussit toujours, mais un fourre-tout peut être quelque chose qui est vrai.La forme d'un
case
est:Il fonctionne en évaluant tout d'abord et ensuite d'essayer de faire correspondre la valeur avec des motifs dans le cas des clauses de l'op-bas (défini) jusqu'à ce qu'une correspondance, puis le corps de cette clause est
évaluée et le
case
expression renvoie la valeur de la dernière expression dans le corps. Si aucun motif correspond alors uncase_clause
d'erreur est généré.Noter que
if
etcase
sont les deux expressions (tout est une expression), donc ils sont tous les deux valeurs de retour. C'est une des raisons pour lesquelles il n'existe pas de valeur par défaut si rien ne réussit/matchs. Aussi pour vous forcer à couvrir toutes les options, ce qui est particulièrement important pour lescase
.if
est juste un cas dégénéré decase
donc, il en a hérité. Il y a un peu de l'histoire deif
dans l'Erlang Justification que vous pouvez trouver sur trapexit.org en vertu de contributions des utilisateurs.Erlang ne vous permet pas d'avoir une
if
sanstrue
option d'instruction. Si oui ou non c'est quelque chose qui est une véritable déclaration ou une réelletrue
est à vous, mais il est courant d'avoir votretrue
être leelse
dans d'autres langues.Voir le "Ce que le Si?" article sur cette page pour en savoir plus sur cette.
Tout d'abord, je vous recommande vous habituer à utiliser des "cas", parce que de "si", des conditions restreintes à la garde des expressions:
Il n'y a plus d'une façon de faire de l'exécution conditionnelle d'ailleurs " si "et des" cas " qui fonctionne à partir de R13:
Rappelez-vous
if
en Erlang a une valeur de retour, et c'est une expression. C'est pas queif
comme en C ou en Java.Si vous voulez faire quelque chose pour une valeur, le code doit être quelque chose comme ceci;
Voir Pour la Section
if
expression d'Erlang Manuel de Référence pour les plus de détails.