Есть ли какая-то конкретная причина, по которой Regex.MatchData.group(i: Int): java.lang.String возвращает null, а не Option[String]?
Есть ли «Scala Way» для обработки нулей в Scala?
Есть ли какая-то конкретная причина, по которой Regex.MatchData.group(i: Int): java.lang.String возвращает null, а не Option[String]?
Есть ли «Scala Way» для обработки нулей в Scala?
Он возвращает null, потому что это неглубокий интерфейс поверх библиотеки Java. Я тоже думаю, что это отстой, и я был укушен им.
Если вы получите значение, которое может быть нулевым, вы можете написать Option(value)
в Scala 2.8, и оно станет либо None
, либо Some(value)
. Это не работает с сопоставлением с образцом, но вы можете написать для этого свой собственный экстрактор:
object Optional {
def unapply[T](a: T) = if (null == a) Some(None) else Some(Some(a))
}
Примеры:
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
Option(value)
работает только в Scala 2.8. Не 2.7.х
- person Alexander Azarov; 04.12.2009