我想检查"状态"两个选项是相同的:
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
答案 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