我很高兴在Scala中使用Option类型,Lift的Box[T]
也很棒。当电梯箱[T]有空值时,理解机构执行
但我有点困惑与如何处理空当它是一个有效的状态。
例如,我的方案有三个丘壑:title
,startDate
和endDate
,title
和startDate
是必需的领域,但endDate
可能是空的。
现在,我想从数据库中获得这些数据,所以我包他们到Box[T]
,并且在以下情况下,endDate
返回Empty
这意味着数据库是NULL
。
现在我想在屏幕上打印这些数据,所以我有下面的代码,但它不会工作,因为endDate
是空的,所以理解的主体将不会执行。
import net.liftweb.common._
object Main
{
val title: Box[String] = Full("title")
val startDate: Box[String] = Full("startDate")
val endDate: Box[String] = Empty
def main(args: Array[String]) {
for (title <- this.title; startDate <- this.startDate;
endDate <- this.endDate)
{
println("Title:" + title)
println("StartDate:" + startDate)
println("EndDate:" + endDate) // I hope now endDate = Empty or None
}
}
}
如果我让endDate
为Box[Option[String]]
,它会工作得很好,但我觉得这是一个有点难看,因为Box[String]
应足以来表示endDate
是数据库NULL。
我知道有''openOr(“”)''可以用,但我会想保持作为结束日期''Empty''或''None'',因为在某些情况下,空字符串有效并且不同于没有价值。 – 2012-02-12 06:32:16
你有没有考虑从Box [T]到Option [T]创建隐式? – Destin 2012-02-12 06:57:37