在我的Scala程序中,我收到了一些JSON。
其中一个字段是可选的布尔值。如果字段丢失,或者其值为false,我想返回None
。如果其值为true,我想返回Some(true)
。
这相当于将Some(false)
转换为None
,我定义了以下函数:
def boolmap(ob: Option[Boolean]) = if(ob == Some(false)) None else ob
它有效,但似乎不是很惯用。有什么更优雅的吗?
答案 0 :(得分:20)
这是ob.filter(identity)
。我不确定这是否更清楚,但它更短。
答案 1 :(得分:6)
我同意其他人的意见,您也可以返回true
或false
,因为您没有区分根本不存在的属性,null
或false
1}}。
如果您刚刚返回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
,但在这种情况下,它看起来很奇怪:
obj collect { case true => true }