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

我可以为==重现Scala的行为吗?

发布时间:2020-12-16 09:52:20 所属栏目:安全 来源:网络整理
导读:在 Scala编程中,我可以读到==运算符的行为就好像它是这样定义的: final def == (that: Any): Boolean = if (null eq this) {null eq that} else {this equals that} 但实际上必须有编译魔术来避免空指针异常,对吗?有没有办法让我用纯Scala复制这种行为;即,
在 Scala编程中,我可以读到==运算符的行为就好像它是这样定义的:

final def == (that: Any): Boolean = if (null eq this) {null eq that} else {this equals that}

但实际上必须有编译魔术来避免空指针异常,对吗?有没有办法让我用纯Scala复制这种行为;即,如果接收方为空,有一个操作符/方法返回一个东西,如果不是,则返回另一个东西?我的意思是null eq的实际实现.

我想我可以编写一个“pimp”,然后在包装类上定义方法,但是有更直接的方法吗?

解决方法

我不这么认为.据我所知,没有神奇的空位. (见更新)

我认为你能做的最好的事情是将任何对象包装成选项,这样你就可以使用它中的大量有用东西:

implicit def toOption[T](target: T) = Option(target)

val q: String = null
val q1: String = "string"

println(q getOrElse "null") // prints: null
println(q1  getOrElse "null") // prints: string

更新

我找到了这个文件:

http://www.scala-lang.org/api/2.7.7/scala/Null.html

根据它:

Class Null is – together with class Nothing – at the bottom of the Scala type hierarchy.

所以即使null还有从AnyRef继承的方法,比如eq,==等…你也可以使用它们:

val q: String = null
val q1: String = "string"

println(null eq q) // prints: true
println(null eq q1) // prints: false

(编辑:李大同)

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

    推荐文章
      热点阅读