我会None
尽可能坚持,这几乎总是如此。它更短且被广泛使用。Option.empty
允许你指定底层值的类型,所以当你需要帮助类型推断时使用它。如果编译器已经知道该类型None
将按预期工作,但是在定义新变量时
var a = None
会导致推断a
出None.type
你想要的不太可能。
然后,您可以使用以下几种方法之一来帮助推断您需要什么
@ var a = Option.empty[String]
a: Option[String] = None
@ var a: Option[String] = None
a: Option[String] = None
@ var a = None: Option[String] // this one is rather uncommon
a: Option[String] = None
编译器需要帮助的另一个地方:
List(1, 2, 3).foldLeft(Option.empty[String])((a, e) => a.map(s => s + e.toString))
(代码没有意义,只是作为一个例子)如果你要省略类型,或者用None
累加器的类型替换它,将分别推断为Option[Nothing]
和None.type
。
就我个人而言,这是我会去的地方,对于其他情况,我会尽可能Option.empty
坚持。None