Erlang变量
在Eelang中一个变量的范围是在相同函数中变量被绑定后的任意位置。
Case
unsafe(X) →
case X of
one → Y = true ;
_ → Z =false ;
end,
Y.
这是一种不好的变成习惯。Y可能没有被定义。下面是安全使用变量的理想方法,对应的变量只绑定一次,而变量的值由一个case语句决定。
Case 是一种匹配的方式,而if是一种保护元的方式。
safe(X) → preferred(X) →
case X of Y = case X of
one → Y = 12; one → 12;
_ → Y = 196 _ → 196
end , end,
X+Y. X+Y.
if
If 结构就像一个没有conditinal-expression和of关键字的case语句。
If
Guard1 → expressional1 , expressional2 , … ;
Guard2 → expressional1, expressional2, … ;
end
保护元表达式Guard1,...,Guardn按次序进行计算,直到其中的一个计算结果为true。
Eg .
If
X < 1 → smaller ;
X > 1 → greater ;
X==1 → equal
end .
改写为
if
X<1 → smaller ;
X>1 → greater ;
true → equal
end .
Catch-all 语句实现,可以清楚地表明它将始终返回一个结构。
下面是当if语句由一系列保护元来测试特定表达式值的时候,任何使用case表达式来重写它。
If
X rem 2 == 1 ->old ;
X rem 2 == 0 → even
end
case X rem 2 of
1 → old ;
0 → even
end .
保护元
保护元(Guard)是一个额外的限制条件,它应用于函数的case或者receive语句中()。保护元应该放在”=>”之前来分隔语句的主题和头部。保护元由when关键字和紧跟其后的一个保护元表达式组成。只有在模式匹配和保护元素表达式求值结果为基元true的情况下,这个语句才会执行。
Erlamg 允许保护元进行简单的逻辑组合,以不同的方式实现:
-》用逗号(,)来分隔各个保护元语句,这是一种逻辑乘,因此只有在串行序列中所有表达式的值都是true的时候,它的结果才是true。
-》用分号(;)