2010-10-20 9 views
7

Incluso con la prevalencia de las mónadas Box y Option, todavía tenemos que verificar valores nulos aquí y allá. ¡Lo mejor que he encontrado hasta ahora es usar el Box # !! método:¿Cómo manejo idiomáticamente los controles nulos desde Scala/Lift?

(Box !! possiblyNull).map(_.toString).openOr("") 

¿Hay una manera mejor de hacer esto? He intentado utilizar el método de aplicación de la caja:

Box(possiblyNull).map(_.toString).openOr("") 

Pero el compilador se quejó de una ambigua referencia a una definición sobrecargada, específicamente:

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

no estoy seguro de por qué está sucediendo, pero yo estaba esperando allí sería una forma más breve y concisa de decir "Dame el valor de esta cadena, o simplemente" ". Estaba considerando usar tryo, pero me pareció un desperdicio lidiar con una excepción cuando podría evitarse.

Respuesta

11

I no sé de qué se trata Box. Pero aquí va un ejemplo simple utilizando la opción:

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 
+0

Guau, eso es mucho más fácil ... gracias. Además, Box es el revamping de la opción de Lift Framework. En lugar de las dos subclases de Option, tiene tres: Completa, Vacía y Falla. – Collin

+0

Eso suena como http://www.scala-lang.org/archives/downloads/distrib/files/nightly/docs/library/scala/Either.html – pedrofurla

Cuestiones relacionadas