Pergunta

Existe algum motivo específico para que regex.matchdata.group (i: int): java.lang.string retorna nulo em vez de opção [string]?

Existe uma "maneira scala" de lidar com nulos em Scala?

Foi útil?

Solução

Ele retorna nulo porque é uma interface superficial sobre a biblioteca Java. Acho que também é péssimo, e fui mordido por isso.

Se você obtiver um valor que possa ser nulo, você pode escrever Option(value) no scala 2.8 e ele se tornará None ou Some(value). Isso não funciona com a correspondência de padrões, mas você pode escrever seu próprio extrator para isso:

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

Exemplos:

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top