我一直在努力学习Erlang,并且在函数和case语句的结尾处遇到了一些问题。
即,何时在我的函数或case语句中使用分号,逗号或句点?
我已经开始工作,但我并不理解为什么,并且正在寻找更多信息。
答案 0 :(得分:49)
我喜欢将分号读为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*
这应该清楚为什么没有;在案件的最后一个条款之后。
答案 1 :(得分:46)
一行正常代码末尾的逗号。
案例陈述结束时的分号,或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
答案 2 :(得分:22)
在模块中,句点用于终止模块属性和函数声明(a.k.a。'forms')。您可以记住这一点,因为表单不是表达式(没有从它们返回值),因此句点表示语句的结尾。
请记住,具有不同arities的函数的定义被视为单独的语句,因此每个函数都将被句点终止。
例如,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.
答案 3 :(得分:3)
你可以把它想象成英文标点符号。逗号用于分隔系列中的事物,分号用于分隔两个非常密切相关的独立子句[1](例如案例陈述的不同情况,同名的函数子句和符合不同模式的arity)和句点用于结束一个句子(完整的想法)。
答案 4 :(得分:3)
逗号分隔表达式,参数或列表/元组或二进制元素。它过度劳累了。