在Erlang,我什么时候使用; 或者,或者?
我一直在试图学习Erlang,并且在函数和case语句结束行时遇到了一些问题。
也就是说,我什么时候在我的函数或case语句中使用分号,逗号或句点?
我已经得到了东西的工作,但我不明白为什么,并正在寻找更多的信息。
逗号在一行正常代码的末尾。
在case case语句结尾的分号,或者if语句等等。最后一个case或者if语句末尾没有任何内容。 一个函数结束的时期。
例子(抱歉随机variables的名字,显然这并没有做任何事情,但说明了一点):
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
我喜欢把分号读作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*
这应该说明为什么没有; 案件的最后一个条款之后。
期间(。)
在模块中,句点用于终止模块属性和函数声明(又名'forms')。 您可以记住这一点,因为表单不是expression式(没有值从它们返回),因此该句点表示语句的结尾。
请记住,具有不同元素的函数的定义被认为是单独的语句,因此每个函数都会被一个句点终止。
例如, hello/0
和hello/1:
的函数定义hello/1:
hello() -> hello_world. hello(Greeting) -> Greeting.
(请注意,在erlang shell中,句点用于终止和评估expression式,但这是一个exception。)
分号(;)
分号用作子句分隔符,用于函数子句和expression式分支。
例1,function从句:
factorial(0) -> 1; factorial(N) -> N * fac(N-1).
例2,expression式分支:
if X < 0 -> negative; X > 0 -> positive; X == 0 -> zero end
逗号(,)
逗号是expression式分隔符。 如果一个逗号跟在一个expression式之后,这意味着在该子句之后还有另一个expression式。
hello(Greeting, Name) -> FullGreeting = Greeting ++ ", " ++ Name, FullGreeting.
你可以把它想成英文标点符号。 逗号用于分隔一系列事物,分号用于分隔两个非常紧密相关的独立子句[1](例如,case语句的不同情况,相同名称和不同模式匹配的function子句)和句点被用来结束一个句子(完整的想法)。
- 或者certificate你上了大学。 “不要用分号,他们是异装癖的雌雄同体,绝对没有什么,只是表明你已经上过大学了。 – Kurt Vonnegut
逗号分隔expression式,参数或列表/元组或二进制元素。 这是过度劳累。