Regex.matchdata retornando nulo: por que não opção [string]?
-
12-09-2019 - |
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?
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