Y at-il une raison particulière Regex.MatchData.group (i: Int): java.lang.String retourne null plutôt que l'option [chaîne]?Regex.MatchData retourne null: pourquoi pas Option [String]?
Y at-il une "Scala Way" pour gérer à Scala nulls?
Y at-il une raison particulière Regex.MatchData.group (i: Int): java.lang.String retourne null plutôt que l'option [chaîne]?Regex.MatchData retourne null: pourquoi pas Option [String]?
Y at-il une "Scala Way" pour gérer à Scala nulls?
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
J'oublie toujours de vérifier ces définitions d'objets :) L'exemple correspondant de modèle est tout à fait intéressant. –
Une seule remarque: 'Option (value)' fonctionne uniquement dans Scala 2.8. Pas 2.7.x –
Assez vrai. J'étais une fois de mieux à tagging 2.8 choses en tant que tel. –