如何有效地检查定义了两个选项?

时间:2014-04-09 23:22:24

标签: scala scala-option

假设我有两个选择:

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 */
}

3 个答案:

答案 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      ) => ???
}