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

soc*_*soc 11 methods null scala standard-library scala-option

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

kas*_*ens 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)
Run Code Online (Sandbox Code Playgroud)

我认为,这里的推理是你不想Option[String]用于所有群体.如果组不是可选的,这将使代码不必要地笨拙.不幸的是,如果组是可选的,则在编译时不知道.所以它Option[String]适用于所有组或null不匹配组.

  • 我真的很喜欢这样一个事实:正则表达式自动变成模式匹配器,并且事实上90%的情况下你需要一个直的`String`; 但是由于Scala几乎完全没有奇怪的例外,如果他们使用`Option [String]`来保持一致性可能是一个好主意.解析Json时,'Option [String]`和/或`List`经常出现,因为我在for-comprehension中使用它们,所以我认为我不介意它们. (2认同)
  • @Eugene提示:如果指定了类型,那么它将与`null`不匹配.例如,`case number(intPart:String,decimalPart:String)`与上面的字符串不匹配. (2认同)

Eug*_*ota 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
Run Code Online (Sandbox Code Playgroud)

我不知道为什么用它String代替Option[URI].