假设我有两个选择:
val a: Option = Some("string")
val b: Option = None
如何有效地检查是否定义了a和b?
我现在可以写下这样的东西:
if (a.isDefined && b.isDefined) {
....
}
但是,它看起来很丑陋而且效率不高。
因此。怎么做?什么是最佳做法?
更新
我想做我的业务逻辑。
if (a.isDefined && b.isDefined) {
....
SomeService.changeStatus(someObject, someStatus)
...
/* some logic with a */
/* some logic with b */
}
答案 0 :(得分:5)
或者,只是为了好玩,
scala> val a: Option[String] = Some("string")
a: Option[String] = Some(string)
scala> val b: Option[String] = None
b: Option[String] = None
scala> val c = Option("c")
c: Option[String] = Some(c)
scala> (a zip b).nonEmpty
res0: Boolean = false
scala> (a zip c).nonEmpty
res1: Boolean = true
scala> (a zip b zip c).nonEmpty
res2: Boolean = false
答案 1 :(得分:4)
使用for
理解:
val a: Option[String] = Some("string")
val b: Option[String] = None
for {
aValue <- a
bValue <- b
} yield SomeService.changeStatus(someObject, someStatus)
答案 2 :(得分:0)
我正在看这个,需要以不同的方式处理每个组合,所以我去找了个比赛:
val a: Option[String] = Some("a")
val b: Option[String] = None
(a, b) match {
case (Some(aStr), Some(bStr)) => ???
case (Some(aStr), None ) => ???
case (None, Some(bStr)) => ???
case (None, None ) => ???
}