在我的 Scala 程序中,我收到了一些 JSON。
其中一个字段是可选的布尔值。如果该字段丢失,或者它的值为 false,我想返回None
. 如果它的值为真,我想返回Some(true)
。
因为这相当于转换Some(false)
成None
,所以我定义了以下函数:
def boolmap(ob: Option[Boolean]) = if(ob == Some(false)) None else ob
它有效,但似乎不是很地道。还有什么更优雅的吗?
在我的 Scala 程序中,我收到了一些 JSON。
其中一个字段是可选的布尔值。如果该字段丢失,或者它的值为 false,我想返回None
. 如果它的值为真,我想返回Some(true)
。
因为这相当于转换Some(false)
成None
,所以我定义了以下函数:
def boolmap(ob: Option[Boolean]) = if(ob == Some(false)) None else ob
它有效,但似乎不是很地道。还有什么更优雅的吗?
这是ob.filter(identity)
. 我不确定这是否更清楚,但它更短。
我同意其他人的观点,即您最好返回true
,或者false
因为您没有区分根本不存在的属性,存在null
或存在false
。
如果你刚回来Boolean
,你可以这样做:
scala> Some(true) exists { _ == true }
res0: true
scala> Some(false) exists { _ == true }
res1: Boolean = false
scala> None exists { _ == true }
res2: Boolean = false
如果您坚持返回Option[Boolean]
模式匹配会更惯用:
ob match {
case Some(true) => Some(true)
case _ => None
}
您也可以使用collect
,但在这种情况下,它看起来 IMO 很奇怪:
obj collect { case true => true }