我想知道标准库是否完全null
- 免费 - 如果不是 - 会对合理的用例存在感兴趣,其中返回null
比返回一些Option
实例更可取
答案 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轻松集成。两者似乎都不太可能。