为什么有Option.get方法

Man*_*idt 10 scala api-design scala-collections

为什么get定义方法Option而不是Some

一个可以应用模式匹配和使用foreach,map,flatMap,getOrElse这无论如何是不优先运行时异常的危险,如果None.get被调用.

是否真的存在这种get方法非常有说服力以至于证明这一点的理由?使用该get方法让我想起Java,其中"我不需要检查null,因为我知道var已设置",然后查看a NullPointerException.

Mat*_*t R 6

当您通过类型系统未捕获的推理知道您拥有的值不是None时,Option.get偶尔会有用.但是,您只有在尝试时才能达到:

  • 安排这些知识由你的类型表达.
  • 使用提到的Option处理方法(flatMap,getOrElse等),并且它们都不合适.

这对于一次性/交互式代码(REPL,工作表等)也很方便.

  • 这就是它.我认为这样做的语法开销应该更高,以免对那些认为"该死的,我的价值在'期权'中的新手更有吸引力!我怎么能把它拿出来?!哦,`get`" (4认同)

Jed*_*ith 0

没有充分的理由。Martin Odersky在 2007 年的这次提交中添加了它,所以我想我们需要问他的动机。早期版本有getOrElse语义。

  • 自[初始版本](https://github.com/scala/scala/blob/23d2bfbeb21f63d82ed46d5b1b0b85b1ed2f4355/sources/scala/Option.scala)以来,方法“get”位于“Option”中。 (2认同)