如何惯用地处理Scala/Lift中的空检查?

如何惯用地处理Scala/Lift中的空检查?,scala,scala-2.8,lift,Scala,Scala 2.8,Lift,即使在框和选项单子流行的情况下,我们仍然需要到处检查空值。到目前为止,我想到的最好的方法就是使用这个盒子!!方法: (Box !! possiblyNull).map(_.toString).openOr("") 有更好的方法吗?我尝试使用Box的apply方法: Box(possiblyNull).map(_.toString).openOr("") 但编译器抱怨对重载定义的引用不明确,特别是: [InType,OutType](value: InType) (pf: PartialFun

即使在框和选项单子流行的情况下,我们仍然需要到处检查空值。到目前为止,我想到的最好的方法就是使用这个盒子!!方法:

(Box !! possiblyNull).map(_.toString).openOr("")
有更好的方法吗?我尝试使用Box的apply方法:

Box(possiblyNull).map(_.toString).openOr("")
但编译器抱怨对重载定义的引用不明确,特别是:

[InType,OutType](value: InType)
(pf: PartialFunction[InType,OutType])net.liftweb.common.Box[OutType]

我不知道为什么会发生这种情况,但我希望有一种更简短的方式来表达“给我这个字符串的值,或者干脆”。我曾考虑使用tryo,但认为在可以避免的情况下处理异常是浪费时间的。

我不知道框是关于什么的。但下面是一个使用Option的简单示例:

scala> val str1:String="abc"
str1: String = abc

scala> val str2:String=null
str2: String = null

scala> Option(str1).getOrElse("XXX")
res0: String = abc

scala> Option(str2).getOrElse("XXX")
res1: String = XXX

哇,那容易多了。谢谢。另外,Box是提升框架对Option的重新包装。它不是Option的两个子类,而是三个子类:Full、Empty和Failure。这听起来像