哪些Scala方法返回null而不是Option,为什么?

时间:2011-05-30 21:52:01

标签: scala methods null standard-library scala-option

我想知道标准库是否完全null - 免费 - 如果不是 - 会对合理的用例存在感兴趣,其中返回null比返回一些Option实例更可取

3 个答案:

答案 0 :(得分:5)

我在标准库中使用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

答案 1 :(得分:5)

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],我不知道。

答案 2 :(得分:-1)

我想不出任何所以我在api中进行了谷歌搜索(inurl:scala-lang.org/api return + null)并且它似乎没有产生任何记录的null用法。

可能存在som内部使用。我能想到的唯一原因就是避免使用额外的Some-object或者与java轻松集成。两者似乎都不太可能。

相关问题