Какие методы Scala возвращают null вместо Option и почему? - PullRequest
11 голосов
/ 31 мая 2011

Интересно, является ли стандартная библиотека полностью null -безопасной и - если нет - будет интересно, какие существуют разумные варианты использования, где возврат null предпочтительнее, чем возвращение некоторого Option экземпляра.

Ответы [ 3 ]

5 голосов
/ 31 мая 2011

Единственное место, где я видел null, используемое в стандартной библиотеке, это необязательные группы регулярных выражений.

scala> val number = """(\d+)(\.\d+)?""".r // matches digits optionally followed by a . and more digits
number: scala.util.matching.Regex = (\d+)(\.\d+)?
scala> "12" match {
     |   case number(intPart, decimalPart) => (intPart, decimalPart)
     | }
res0: (String, String) = (12,null)

Я думаю, что причина в том, что вы не хотите использовать Option[String] для всех групп. Это сделает код излишне неуклюжим, если группа не является необязательной. К сожалению, во время компиляции неизвестно, является ли группа необязательной. Так что это либо Option[String] для всех групп, либо null для не соответствующих групп.

5 голосов
/ 31 мая 2011

NamespaceBinding возвращает null для локального пространства имен или в следующем случае неопределенный ввод.

$ scala
Welcome to Scala version 2.9.0.1 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_24).
Type in expressions to have them evaluated.
Type :help for more information.

scala> (<foo/>).scope.getURI("something")
res0: String = null

Почему используется String вместо Option[URI], я полагаюне знаю.

0 голосов
/ 31 мая 2011

Я не могу думать ни о чем, поэтому я выполнил поиск Google в API (inurl: scala-lang.org/api return + null), и он, похоже, не дал никакого документированного использования null.

Возможно, существует сом для внутреннего пользования.Единственные причины, по которым я могу придумать, - это избежать лишних объектов Some или облегчить интеграцию с Java.Оба кажутся маловероятными.

...