Регулярное выражение.MatchData, возвращающий null: почему не Option [String]?
Есть ли какая-то особая причина, по которой регулярное выражение.MatchData.группа (i: Int): java.яз..String возвращает null, а не Option [String]?
Существует ли "способ Scala" для обработки нулей в Scala?
1 ответ:
Он возвращает null, потому что это неглубокий интерфейс над библиотекой Java. Я думаю, что это тоже отстой, и я был укушен им.
Если вы получаете значение, которое может быть null, вы можете написать
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