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

Scala 如何有效地检查是否定义了两个选项?,scala,scala-option,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.ch

假设我有两个选择:

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

使用
进行理解:

val a: Option[String] = Some("string")
val b: Option[String] = None

for {
    aValue <- a
    bValue <- b
} yield SomeService.changeStatus(someObject, someStatus)
val a:Option[String]=Some(“String”)
val b:选项[字符串]=无
为了{

aValue或者,只是为了好玩

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

我在考虑这一点,需要以不同的方式处理每个组合,因此我选择了一个匹配:

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

视情况而定,如果两个选项都定义了,您想对它们做什么?就效率而言,您当前的解决方案可能是最快的(尽管可能不值得太担心),谢谢您的回复。我想用a和b来处理我的业务逻辑,这比if(a.isDefined&&b.isDefined)更有效SomeService.changeStatus(someObject,someStatus)
?它显然看起来更模糊。它的效率可能稍低,因为它变成了
a.flatMap(aValue=>b.map(bValue=>…)
。但是,这是在scala中使用
选项的惯用方法,可以防止
选项
设计用于保护您不受影响的一类错误。在编译时大小未知的
列表[选项[…]
中是否也可以使用此模式?