13

我有这样一段代码:

case sth of
    {a, 1} -> doA();
    {a, 2} -> doA();
    {a, 3} -> doB()
end.

有没有办法不重复“doA()”部分?我认为这应该很容易,但我在谷歌中找不到答案。

4

2 回答 2

24

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

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

此外,您的表达式(sth)在这里是一个原子,这意味着它永远无法匹配任何这些情况。

于 2012-07-08T07:19:24.990 回答
15

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

添加此功能虽然可能,但会导致对变量进行一些“有趣”的处理。

于 2012-07-08T10:53:21.523 回答