2012-07-08 50 views
8

我有那樣的一段代碼:在Erlang的case語句中有多個匹配?

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

有沒有辦法不重複「DOA()」的一部分?我認爲這應該很容易,但我無法在谷歌找到答案。

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

而且你的表情(sth)在這裏這意味着它可以永遠不會匹配任何這些案件的原子:

回答

13

除了使用@Bunnit建議的方式使用警衛之外,沒有辦法避免重複使用這些子句體。在一個條款中沒有替代模式。在你的情況下,沒有太多的重複,但如果重複的主體更復雜,那麼最好的方法是把它放在一個單獨的函數中並調用它。

儘管可能會添加此功能,但會導致某些「有趣」的變量處理。

19

當case語句警衛比如你可以使用。

+1

我的問題稍微一般。 – zie1ony 2012-07-08 21:04:00

+0

這也是有風險的,因爲1和2 <3,是的,但也是0,-1,-2,... – 2012-07-12 15:00:21