惯用法治疗方法[布尔]

时间:2013-06-18 22:13:46

标签: scala

在我的Scala程序中,我收到了一些JSON。

其中一个字段是可选的布尔值。如果字段丢失,或者其值为false,我想返回None。如果其值为true,我想返回Some(true)

这相当于将Some(false)转换为None,我定义了以下函数:

def boolmap(ob: Option[Boolean]) = if(ob == Some(false)) None else ob

它有效,但似乎不是很惯用。有什么更优雅的吗?

2 个答案:

答案 0 :(得分:20)

这是ob.filter(identity)。我不确定这是否更清楚,但它更短。

答案 1 :(得分:6)

我同意其他人的意见,您也可以返回truefalse,因为您没有区分根本不存在的属性,nullfalse 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 }