我有那段代码:
case sth of
{a, 1} -> doA();
{a, 2} -> doA();
{a, 3} -> doB()
end.
有没有办法不重复“doA()”部分?我认为应该很容易,但我在谷歌找不到答案。
答案 0 :(得分:20)
您可以在案例陈述中使用守卫,例如:
case sth of
{a, Var} when Var < 3-> doA();
{a, 3} -> doB()
end.
此外,你的表达式(sth
)在这里是一个原子,意味着它永远不会匹配任何这些情况。
答案 1 :(得分:13)
除了以@Bunnit建议的方式使用警卫之外,没有办法避免重复子句体。在一个子句中无法使用替代模式。在你的情况下没有太多的重复,但如果重复的身体更复杂,那么最好的方法是将它放在一个单独的函数中并调用它。
尽管可能添加此功能,但会导致一些“有趣”的变量处理。