在我的Scala程序中,我收到了一些JSON.
其中一个字段是可选的布尔值.如果字段丢失,或者其值为false,我想返回None.如果它的值是真的,我想回来Some(true).
这相当于转换Some(false)成None,我定义了以下功能:
def boolmap(ob: Option[Boolean]) = if(ob == Some(false)) None else ob
它有效,但它似乎不是非常惯用.有什么更优雅的吗?
Rex*_*err 21
这是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
Run Code Online (Sandbox Code Playgroud)
如果你坚持返回Option[Boolean]一个模式匹配将更加惯用:
ob match {
case Some(true) => Some(true)
case _ => None
}
Run Code Online (Sandbox Code Playgroud)
你也可以使用,collect但在这种情况下,它看起来很奇怪IMO:
obj collect { case true => true }
Run Code Online (Sandbox Code Playgroud)