在Erlang的case语句中有多个匹配?

zie*_*ony 9 erlang case

我有那种代码:

case sth of
    {a, 1} -> doA();
    {a, 2} -> doA();
    {a, 3} -> doB()
end.
Run Code Online (Sandbox Code Playgroud)

有没有办法不重复"doA()"部分?我认为它应该很容易,但我在谷歌找不到答案.

Sco*_*gan 20

您可以在case语句中使用守卫,例如:

case sth of
    {a, Var} when Var < 3-> doA();
    {a, 3} -> doB()
end.
Run Code Online (Sandbox Code Playgroud)

你的表达式(sth)在这里也是一个原子意味着它永远不会匹配任何这些情况.


rvi*_*ing 13

除了以@Bunnit建议的方式使用警卫之外,没有办法避免重复子句主体.在一个子句中无法使用替代模式.在你的情况下没有太多的重复,但如果重复的身体更复杂,那么最好的方法是将它放在一个单独的函数中并调用它.

尽管可能添加此功能,但会导致对变量进行一些"有趣的"处理.