gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:09:10 30 4
gpt4 key购买 nike

在 Scala 编程中,我可以读到 ==运算符的行为就像是这样定义的:

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

但实际上必须有编译器魔法来避免空指针异常,对吗?有什么方法可以让我用纯 Scala 复制这种行为吗?即,如果接收者为空,则运算符/方法返回一件事,如果不是,则返回另一件事?我的意思是 null eq this 的实际实现.

我想我可以写一个“皮条客”,然后在包装类上定义方法,但是有没有更直接的方法来做到这一点?

最佳答案

我不这么认为。据我所知,空值没有魔法。 (见更新)
我认为你能做的最好的事情就是将任何对象包装到选项中,这样你就可以从中使用一堆有用的东西:

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

关于scala - 我可以为 == 重现 Scala 的行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4854553/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com