Я очень доволен работой с типом Option в Scala, и Lift's Box[T]
тоже великолепен.
Но меня немного смущает, как обращаться с Empty, когда оно действительно.
Например, моя программа имеет три значения: 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 в базе данных.