我一直在尝试学习 Erlang,并且在函数和case
语句的结尾行遇到了一些问题。
何时在函数或语句中使用分号 ( ;
)、逗号 ( ,
) 或句点case
?
我一直在尝试学习 Erlang,并且在函数和case
语句的结尾行遇到了一些问题。
何时在函数或语句中使用分号 ( ;
)、逗号 ( ,
) 或句点case
?
我喜欢将分号读作 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 语句或 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
在模块中,句点用于终止模块属性和函数声明(又名“表单”)。您可以记住这一点,因为表单不是表达式(不会从它们返回值),因此句点代表语句的结束。
请记住,具有不同元数的函数定义被视为单独的语句,因此每个语句都会以句点终止。
例如,和的函数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.
你可以把它想象成英语标点符号。逗号用于分隔系列中的事物,分号用于分隔两个非常密切相关的独立子句[1](例如,case 语句的不同 case、同名和匹配不同模式的函数子句)和句点用于结束句子(完整的思想)。
逗号分隔列表/元组或二进制的表达式、参数或元素。它过度劳累。