我有很多的模式匹配代碼如下所示:如果某些Foo
的比賽中,Bar
一個Some
返回,否則None
,並且有很多Foos
和長構造函數Bars
。例如:要從模式匹配中返回Option,請使用Try?
y match {
case Foo1(z) => Some(Bar1(z))
case Foo2(z) => Some(Bar2(z))
case Foo3(z) => Some(Bar3(z))
case Foo4(z) => Some(Bar4(z))
case _ => None
}
在實際的代碼中,箭頭右側的構造函數更復雜,並且有更多的情況。現在
,爲了擺脫重複的選項構造函數(Some
),我可以這樣做:
Try(
y match {
case Foo1(z) => Bar1(z)
case Foo2(z) => Bar2(z)
case Foo3(z) => Bar3(z)
case Foo4(z) => Bar4(z)
}
).toOption
這看起來顯著清潔劑給我,並從語義的角度來看,這是合理的,因爲case _
實際上是不應該發生的情況,因此將其視爲例外似乎是合理的。請注意,這是重複性的Somes
錯誤我,而不是最後case
。
我的問題是,是否有一些(例如表現)懲罰後一種方法,我不知道。
我的重點是可讀性(這不像聽起來那麼客觀),它是額外的一些我覺得分散注意力的東西,而不是最後一種情況。你的版本會處理無與倫比的情況嗎?如果是這樣,我覺得它是一個非常好的解決方案。我看到你關於Try的觀點。 – DCS
我關於可讀性的觀點是,在'Try'中包裝'match'會掩蓋它的目的,是的。我會更詳細地編輯。 –