2013-04-10 34 views
2

當我通過幾個模式匹配發送一個變量時,這樣做的命名約定是什麼?後續/嵌套模式匹配

val somethingBetweenOriginalAndResult = original match { 
    case ... 
    case ... 
} 
val somethingElseBetweenOriginalAndResult = somethingBetweenOriginalAndResult match { 
    case ... 
    case ... 
} 
val result = somethingElseBetweenOriginalAndResult match { 
    case ... 
    case ... 
} 

其實我只需要originalresult之間引入每VAL smutches我的命名空間,並要求我研究出一個新的變量名。我怎樣才能避免這種情況?

回答

4

使用塊和短期臨時變量的名稱(只是足夠長的時間來提醒別人你想實現什麼 - 如果這是顯而易見的,x和公司將做精):

val original = ... 
val result = { 
    val x = original match { ... } 
    val y = x match { ... } 
    y match { ... } 
} 

你可以甚至完全忽略的變量名,如果你喜歡它的感覺(雖然優先是倒退,所以你需要添加括號或某事):

val result = { 
    ((original match { 
    ... 
    }) match { 
    ... 
    }) match { 
    ... 
    } 
} 

自上次比賽的結果是下一個參數。

+0

謝謝你的解決方案。我更喜歡第二種形式,因爲我不喜歡在上下文中沒有意義的變量名稱。 – ideaboxer 2013-04-10 21:06:29

+1

@ user1625837 - 夠公平的。與瞬時變量建立友好關係也是一件好事,對於需要兩次引用同一事物的情況。小塊代碼的vals像一個便箋簿一樣使用,可以是簡化代碼塊而不實際將其分解成方法(從而定義接口等)的有效方法。 – 2013-04-10 21:24:29

+0

有趣的想法,謝謝 – ideaboxer 2013-04-11 00:12:59

1

如果你真的不在乎某件事情,或許你應該儘量避免創造它。它實際上取決於原型的類型以及您在模式匹配中考慮的情況,但是可能有一種方法可以通過一種模式匹配來實現。最糟糕的情況下,爲什麼不使用:

val result = original match { 
    case ... 
    case ... 
} match { 
    case ... 
    case ... 
} match { 
    case ... 
    case ... 
} 

我不喜歡它,真的,但至少你沒有創建,你可能不小心參考以後不必要的值。