在Erlang中,我何时使用;或者,或者,

j2qf4p5b  于 2022-12-08  发布在  Erlang
关注(0)|答案(5)|浏览(164)

我一直在努力学习Erlang,并在函数和case语句中遇到了一些结束行的问题。
何时在函数或case语句中使用分号(;)、逗号(,)或句点?

7xllpg7q

7xllpg7q1#

我喜欢把分号读成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*

这应该说明为什么没有;在case的最后一个子句之后。

41zrol4v

41zrol4v2#

普通代码行末尾的逗号。
在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
zfycwa2u

zfycwa2u3#

句号(.)

在模块中,句点用于终止模块属性和函数声明(也称为“表单”)。您可以记住这一点,因为表单不是表达式(不会返回任何值),因此句点代表语句的结束。
请记住,具有不同arity的函数的定义被认为是独立的语句,因此每个语句都将以句点结束。
例如,hello/0hello/1:的函数定义

hello() -> hello_world.

hello(Greeting) -> Greeting.

(Note在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.
lndjwyie

lndjwyie4#

你可以把它想象成英语标点符号。逗号用来分隔一系列的事物,分号用来分隔两个非常密切相关的独立分句[1](例如case语句的不同大小写,同名的函数分句和匹配不同模式的arity),句号用来结束一个句子(完整的思想)。
1.或者证明你上过大学。“不要用分号。他们是异装癖雌雄同体者,代表的绝对不是什么。他们所做的只是证明你上过大学。”--库尔特·冯内古特

xt0899hw

xt0899hw5#

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

相关问题