Regex.MatchData возвращает ноль: почему бы не Option [String]? - PullRequest
9 голосов
/ 04 декабря 2009

Есть ли какая-либо конкретная причина, по которой Regex.MatchData.group (i: Int): java.lang.String возвращает ноль, а не Option [String]?

Есть ли "Scala Way" для обработки нулей в Scala?

1 Ответ

9 голосов
/ 04 декабря 2009

Возвращает ноль, потому что это неглубокий интерфейс над библиотекой 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...