加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

我什么时候应该使用Option.empty [A]什么时候应该在Scala中使用N

发布时间:2020-12-16 19:17:22 所属栏目:安全 来源:网络整理
导读:在 Scala中,当我想将某些东西设置为None时,我有几个选择:使用None或Option.empty [A]. 我应该选择一个并持续使用它,还是有时候我应该使用一个而不是另一个? 例: scala def f(str: Option[String]) = strf: (str: Option[String])Option[String]scala f(No
在 Scala中,当我想将某些东西设置为None时,我有几个选择:使用None或Option.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

解决方法

我会尽可能地坚持无,这几乎总是,它更短并且被广泛使用. Option.empty允许您指定基础值的类型,因此在需要帮助键入推断时使用它.如果已知编译器的类型,则无法按预期工作,但是在定义新变量时

var a = None

会导致推断出一个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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读