【发布时间】:2021-03-29 14:11:23
【问题描述】:
我有一个 Option 实例,比如说 O,它包含一个类的实例,比如说 A,而 A 本身里面有一些 Options。
我必须实现这样的东西,用伪代码表示为:
if(A.x exists) {
if(A.y exists) {
//extract values from some another Option Z embedded in A
} else {
// return Option of some default value
}
}
所以我试试这个:
O.filter(some filter condition to have only some specific types of A).filter(!A.x.isEmpty).filter(!A.y.isEmpty).flatMap(_.z.somevalue).orElse(Some("Some default value"))
这是正确的方法,还是我需要在某些时候使用模式匹配?
编辑:结果应该是一个 Option[String].O si an Option[A]。 A是一个有x,y,z字段的类,三个都是String的Option。
【问题讨论】:
-
如果您能提供这些类型的示例定义,会更容易提供帮助;也不清楚最终结果应该是什么。
-
宁可使用
Option组合子或模式匹配;例如(for { x <- A.x; y <- A.y } yield somethingWith(x, y)).getOrElse(defaultValue)