55

我一直在尝试学习 Erlang,并且在函数和case语句的结尾行遇到了一些问题。

何时在函数或语句中使用分号 ( ;)、逗号 ( ,) 或句点case

4

5 回答 5

57

我喜欢将分号读作 OR,逗号读作 AND,句号读作 END。所以

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

读作

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*

这应该清楚为什么没有 ; 在案件的最后一个条款之后。

于 2009-07-11T01:05:51.553 回答
56

普通代码行末尾的逗号。
case 语句或 if 语句等末尾的分号。最后一个 case 或 if 语句末尾没有任何内容。函数结束时的句点。

示例(抱歉随机变量名称,显然这没有做任何事情,但说明了一点):

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
于 2009-07-10T16:35:53.657 回答
29

时期 (。)

在模块中,句点用于终止模块属性和函数声明(又名“表单”)。您可以记住这一点,因为表单不是表达式(不会从它们返回值),因此句点代表语句的结束。

请记住,具有不同元数的函数定义被视为单独的语句,因此每个语句都会以句点终止。

例如,和的函数hello/0定义hello/1:

hello() -> hello_world.

hello(Greeting) -> Greeting.

(请注意,在 erlang shell 中,句点用于终止和评估表达式,但这是异常情况。)

分号 (;)

分号充当子句分隔符,用于函数子句和表达式分支。

示例 1,函数子句:

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

示例 2,表达式分支:

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

逗号 (,)

逗号是表达式分隔符。如果逗号跟在表达式后面,则表示子句中它后面还有另一个表达式。

hello(Greeting, Name) -> 
    FullGreeting = Greeting ++ ", " ++ Name,
    FullGreeting.
于 2012-12-28T19:36:29.747 回答
3

你可以把它想象成英语标点符号。逗号用于分隔系列中的事物,分号用于分隔两个非常密切相关的独立子句[1](例如,case 语句的不同 case、同名和匹配不同模式的函数子句)和句点用于结束句子(完整的思想)。

  1. 或者证明你上过大学。“不要使用分号。他们是异装癖雌雄同体,绝对不代表任何东西。他们所做的只是表明你上过大学。” ——库尔特·冯内古特
于 2009-07-10T16:44:46.543 回答
3

逗号分隔列表/元组或二进制的表达式、参数或元素。它过度劳累。

于 2009-07-23T22:33:43.683 回答