我可以为==重现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 根据它:
所以即使null还有从AnyRef继承的方法,比如eq,==等…你也可以使用它们: val q: String = null val q1: String = "string" println(null eq q) // prints: true println(null eq q1) // prints: false (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |