scala - 什么时候应该使用 Option.empty[A] ,什么时候应该在 Scala 中使用 None ?

标签 scala scala-option

在 Scala 中,当我想将某些内容设置为 None 时,我有几个选择:使用 NoneOption.empty[A] .

我应该只选择一个并始终如一地使用它,还是有时我应该使用一个而不是另一个?

例子:

scala> def f(str: Option[String]) = str
f: (str: Option[String])Option[String]

scala> f(None)
res0: Option[String] = None

scala> f(Option.empty)
res1: Option[String] = None

最佳答案

我会坚持 None只要有可能,这几乎总是如此。它更短且使用广泛。 Option.empty允许您指定底层值的类型,因此当您需要帮助类型推断时使用它。如果编译器已知该类型 None会按预期工作,但是在定义新变量时

var a = None

会导致推断 aNone.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只要有可能。

关于scala - 什么时候应该使用 Option.empty[A] ,什么时候应该在 Scala 中使用 None ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36257132/

相关文章:

scala - 为什么这两个代码块对于 Option 类是等价的?

scala - 我可以使用 SELECT from dataframe 而不是创建此临时表吗?

scala - Spark - 如何根据项目评分创建稀疏矩阵

java - 函数式编程与面向对象编程

scala - 为什么 akka-http Unmarshaler 返回 Future[T] 而不是 T?

scala - 有没有针对Scala项目的OWASP检查工具?

scala - 从包装在 Option[] 中的对象读取多个变量

scala - 需要将 Seq[Option[A]] 转换为 Option[Seq[A]]

scala - 使用 json4s 序列化可选值类实例时出现问题

scala - 将 AnyRef 装箱到选项中的方法在哪里?