Интересно, полностью ли стандартная библиотека null
-бесплатная и - если нет - будет интересно, какие разумные прецеденты существуют, где возвращение null
предпочтительнее возврата некоторого экземпляра Option
.
Какие методы Scala возвращают значение null вместо параметра и почему?
Ответ 1
NamespaceBinding возвращает null
для локального пространства имен или в следующем случае undefined.
$ 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]
, я не знаю.
Ответ 2
Единственное место, которое я видел 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
для не соответствующих групп.
Ответ 3
Я не могу думать ни о чем, поэтому я искал поисковый запрос google в api (inurl: scala -lang.org/api return + null), и он, похоже, не документировал использование null.
Возможно, существует внутреннее использование som. Единственными причинами, которые я могу придумать для этого, было бы избежать дополнительного Some-object или простой интеграции с java. Оба кажутся маловероятными.