Domanda

C'è un motivo particolare per cui Regex.MatchData.group (I: Int):? Java.lang.String restituisce null piuttosto che Opzione [String]

C'è un "modo Scala" per gestire i null a Scala?

È stato utile?

Soluzione

Si restituisce null perché è un'interfaccia poco profonda sopra la libreria Java. Penso che succhia troppo, 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à uno None o Some(value). Che non funziona con il pattern matching, ma si può scrivere il proprio estrattore che:

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top