2009-12-03 21 views

risposta

9

Restituisce null perché è un'interfaccia superficiale sulla libreria Java. Penso che faccia schifo, e sono stato morso da esso.

Se si ottiene un valore che può essere nullo, è possibile scrivere Option(value) su Scala 2.8 e diventerà None o Some(value). Che non funziona con il pattern matching, ma si può scrivere il proprio estrattore per questo:

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

Esempi:

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

mi dimentico sempre di controllare quelle definizioni di oggetti :) L'esempio pattern matching è abbastanza interessante. –

+0

Solo una nota: 'Option (valore)' funziona solo in Scala 2.8. Non 2.7.x –

+0

Abbastanza vero. Una volta sono stato bravo a taggare 2.8 cose in quanto tali. –

Problemi correlati