2009-12-03 7 views

Répondre

9

Il retourne null, car il est une interface peu profonde sur la bibliothèque Java. Je pense que ça craint aussi, et j'ai été mordu par ça. Si vous obtenez une valeur qui peut être nulle, vous pouvez écrire Option(value) sur Scala 2.8 et il deviendra None ou Some(value). Cela ne fonctionne pas avec correspondance de motif, mais vous pouvez écrire votre propre extracteur pour que:

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

Exemples:

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

J'oublie toujours de vérifier ces définitions d'objets :) L'exemple correspondant de modèle est tout à fait intéressant. –

+0

Une seule remarque: 'Option (value)' fonctionne uniquement dans Scala 2.8. Pas 2.7.x –

+0

Assez vrai. J'étais une fois de mieux à tagging 2.8 choses en tant que tel. –