如何检查scala中是否定义了两个选项/未定义

时间:2018-04-16 11:17:38

标签: scala

我想检查"状态"两个选项是相同的:

val a : Option[Double]= ??
val b : Option[Double]= ??

如何以一种好的方式写出来?

val sameState = (a.isDefined && b.isDefined) || (!a.isDefined && !b.isDefined)

所以在单词中:如果a是None而b是None,则返回true,如果a是Some而b是Some,它也应该返回true,否则它应该返回false

我的解决方案似乎相当不容乐观。我正在寻找类似的东西:

val sameState = (a.definition == b.definition)

编辑:背景:

我有一个Seq[Option[_]]并希望将其拆分为Seq[Seq[Option[_]],具体取决于"状态"连续元素的变化与Grouping list items by comparing them with their neighbors

中的变化相同

3 个答案:

答案 0 :(得分:2)

也许只是a.isDefined == b.isDefined

答案 1 :(得分:0)

我自己找到了答案。 size上还有一个Option属性(有些为1,无为0)

val sameState = (a.size == b.size)

为什么会这样?存在从Option[A]Iterable[A]的隐式转换,称为option2Iterable

答案 2 :(得分:-1)

您可以尝试使用match覆盖您所拥有的两个选项的元组。像这样的东西

def isBothDefined(a : Option[Double], b : Option[Double]) = (a,b) match{
  case (Some(x), Some(y)) => "Both defined"
  case (Some(x), None) => "b is not defined"
  case (None, Some(y)) => "a is not defined"
  case _ => "nither s defined"
}

输出

isBothDefined(Option.apply(1.0), Option.empty[Double])
res3: String = b is not defined