2009-12-03 15 views

Respuesta

9

Devuelve nulo porque es una interfaz poco profunda sobre la biblioteca de Java. Creo que apesta también, y me ha mordido.

Si obtiene un valor que puede ser nulo, puede escribir Option(value) en Scala 2.8 y se convertirá en None o Some(value). Eso no funciona con la coincidencia de patrones, pero usted puede escribir su propia extractora para ello:

object Optional { 
    def unapply[T](a: T) = if (null == a) Some(None) else Some(Some(a)) 
} 

Ejemplos:

scala> val a:String = null 
a: String = null 

scala> a match { 
    | case Optional(None) => println("Got none") 
    | case Optional(Some(value)) => println("Got "+value) 
    | } 
Got none 

scala> val a = "string" 
a: java.lang.String = string 

scala> a match { 
    | case Optional(None) => println("Got none") 
    | case Optional(Some(value)) => println("Got "+value) 
    | } 
Got string 

scala> val a = "5" 
a: java.lang.String = 5 

scala> a match { 
    | case Optional(None) => println("Got none") 
    | case Optional(Some(value)) => println("Got "+value.toInt) 
    | } 
Got 5 
+0

siempre olvido para comprobar esas definiciones de objetos :) El ejemplo de coincidencia de patrones es bastante interesante. –

+0

Solo una nota: 'Opción (valor)' funciona solo en Scala 2.8. No 2.7.x –

+0

Cierto. Una vez fui mejor etiquetando 2.8 cosas como tal. –

Cuestiones relacionadas