Erlang中case语句中出现多个匹配怎么办?

13

我有这样一段代码:

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

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

2个回答

25

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

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

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


1
我的问题有点更加普遍。 - zie1ony

16

除了按照@Bunnit建议的方式使用保护措施外,没有避免重复条款体的方法。无法在一个条款中拥有替代模式。在您的情况下,重复的体并不多,但如果重复的体更加复杂,则最好将其放在单独的函数中并调用该函数。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接