Question

J'ai essayé d'apprendre Erlang et ont couru quelques problèmes avec la fin des lignes dans les fonctions et les déclarations de cas.

A savoir, quand dois-je utiliser un point-virgule, une virgule ou période dans mes fonctions ou déclarations de cas?

J'ai eu des choses à travailler, mais je ne comprends pas vraiment pourquoi et je cherchais un peu plus d'informations.

Était-ce utile?

La solution

Virgule à la fin d'une ligne de code normal.
Semicolon à la fin de la déclaration de cas, ou si la déclaration, etc. Le dernier cas ou si la déclaration n'a rien à la fin. Une période à la fin d'une fonction.

exemple (désolé pour les noms de variables aléatoires, bien que cela ne fait rien, mais illustre un point):

case Something of 
    ok ->
        R = 1,     %% comma, end of a line inside a case 
        T = 2;     %% semi colon, end of a case, but not the end of the last
    error ->
        P = 1,     %% comma, end of a line inside a case
        M = 2      %% nothing, end of the last case
end.               %% period, assuming this is the end of the function, comma if not the end of the function

Autres conseils

J'aime lire comme OR virgule, virgule comme ET, arrêt complet FIN. Donc,

foo(X) when X > 0; X < 7 ->
    Y = X * 2,
    case Y of
        12 -> bar;
        _  -> ook
    end;
foo(0) -> zero.

se lit comme

foo(X) when X > 0 *OR* X < 7 ->
    Y = X * 2 *AND*
    case Y of
        12 -> bar *OR*
        _  -> ok
    end *OR*
foo(0) -> zero *END*

Cela devrait faire comprendre pourquoi il n'y a; après la dernière clause d'un cas.

Période (.)

Dans les modules, la période est utilisée pour mettre fin à des attributs des modules et des déclarations de fonctions ( « formes » appelés également). Vous pouvez vous rappeler cela parce que les formes ne sont pas des expressions (aucune valeur est renvoyée d'eux), et donc la période correspond à la fin d'une instruction.

Gardez à l'esprit que les définitions de fonctions avec différentes arités sont considérées comme des déclarations séparées, donc chacun serait mis fin à une période.

Par exemple, les définitions de fonctions pour hello/0 et hello/1:

hello() -> hello_world.

hello(Greeting) -> Greeting.

(Notez que dans le shell Erlang la période est utilisée pour terminer et évaluer les expressions, mais qui est une anomalie.)

virgule (;)

Le point-virgule agit comme un séparateur d'article, tant pour les clauses de fonction et les branches d'expression.

Exemple 1, les clauses de fonction:

factorial(0) -> 1;
factorial(N) -> N * fac(N-1).

Exemple 2, les branches d'expression:

if X < 0  -> negative;
   X > 0  -> positive;
   X == 0 -> zero
end

Virgule (,)

La virgule est un séparateur d'expression. Si une virgule suit une expression, cela signifie qu'il ya une autre expression après dans la clause.

hello(Greeting, Name) -> 
    FullGreeting = Greeting ++ ", " ++ Name,
    FullGreeting.

Vous pouvez penser comme la ponctuation anglaise. Virgules sont utilisées pour séparer les choses dans une série, des points-virgules sont utilisés pour séparer deux clauses indépendantes très étroitement liés [1] (par exemple, les différents cas de la déclaration de cas, les clauses de fonction du même nom et arité qui correspondent à des modèles différents), et les périodes sont utilisés pour mettre fin à une phrase (la pensée complète).

  1. Ou pour prouver que vous allé à l'université. « Ne pas utiliser des points-virgules. Ils sont hermaphrodites travestis qui représentent absolument rien. Tout ce qu'ils font est vous montrer avez été à l'université. » - Kurt Vonnegut

La virgule sépare des expressions ou des arguments, ou des éléments d'une liste / tuple ou binaire. Il est surchargé de travail.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top