首页 > Erlang并发教程 > 3.23 Erlang并发编程-Case
2013
11-06

3.23 Erlang并发编程-Case

BACK TOP文章索引

  1. Case
  2. 共0条评论

Case

case表达式允许在子句主体内部于多个选项中进行选择,语法如下:

case Expr of
    Pattern1 [when Guard1] -> Seq1;
    Pattern2 [when Guard2] -> Seq2;
    ...
    PatternN [when GuardN] -> SeqN
end

首先,对Expr求值,然后,Expr的值将依次与模式Pattern1Pattern2……PatternN进行匹配,直到匹配成功。如果找到一个匹配并且(可选的)的保护式成立,则对应的调用序列将被求值。注意case保护式与函数保护式形式相同。case原语的值就是被选中的序列的值。

至少得有一个模式必须得以匹配——否则就会产生一个运行时错误并引发第??章中的错误处理机制。

举个例子,比方说我们我有个函数allocate(Resource)用于分配某种资源Resource。假设这个函数只返回{yes, Address}no。这样,这个函数便可以放在一个case结构里:

...
case allocate(Resource) of
    {yes,Address} when Address > 0, Address => Max ->
        Sequence 1 ... ;
    no ->
        Sequence 2 ...
end
...

Sequence 1 ...中,变量Address已经被绑定在了allocate/1的返回结果上。

为了避免匹配错误的发生,我们常常追加一个必会匹配的模式[6]作为case原语的最后一个分支:

case Fn of
    ...
    _ ->
        true
end

留下一个回复

你的email不会被公开。