在ScalaZ中,將Option[Validation[E, A]]
轉換爲Validation[E, Option[A]]
的慣用方法是什麼?將選項[驗證[E,A]]轉換爲驗證[E,選項[A]]
例如,在下面的假想代碼:
def convert(x: Option[Validation[E, A]]): Validation[E, Option[A]] =
/* ??? */
def validateThing(thing: A): Validation[E, A] =
/* whatever */
def exampleUseCase(maybeThing: Option[Thing]): Validation[E, Option[Thing]] = {
val validated: Option[Validation[E, Thing]] = a.map(validateThing(_))
// ...
val result: Validation[E, Option[Thing]] = convert(validated)
result
}
什麼會的convert
實施看起來像地道ScalaZ?
我會說這個轉換對我來說沒有多大意義。如果'maybeThing'是'None',你會期望什麼結果?可能失敗的驗證,它沒有,如果它不是,那麼你可以提取價值,並把如果作爲一個'成功'的情況下,那麼你不需要'選項'。 – 4lex1v
'validate'和'validateThing'是假設的,只是爲了顯示這種轉換可能發生的地方。我只關心'convert'的實現是什麼。 – kes
但是,當'maybeThing'爲'None'時,回答具體的問題:成功驗證'None'。 – kes