提问人:K J 提问时间:9/4/2016 更新时间:9/4/2016 访问量:160
scala:覆盖基本类型的等价物
scala: overriding equals of basic types
问:
我定义了一个包装类:
class Wrapper[T](private val value: T)
我想确保 w(v1) == v2 和 v2 == w(v1) iff v1 == v2。第一部分很简单,因为您可以覆盖 Wrapper 类的 equals 方法。但问题是相反的,例如,使 5 == Wrapper(5) 返回 true,从而实现相等的对称性。在 scala 中,您是否可以覆盖 Int 或 String 等基本类型的 equals 方法?在 C++ 中,您可以覆盖 operator==(A, int) 和 operator==(int, A),但 java 或 scala 似乎并非如此。
答:
2赞
Victor Moroz
9/4/2016
#1
如何用隐式来完成它(请注意,这里既不能使用,也不能使用):==
equals
import scala.reflect.ClassTag
implicit class Wrapper[T : ClassTag](val value: T) {
def isEqual(other: Any) = other match {
case x: T =>
x == value
case x: Wrapper[T] =>
x.value == value
case _ =>
false
}
}
5 isEqual (new Wrapper(5)) // true
(new Wrapper(5)) isEqual 5 // true
上一个:隐式定义集合的相等性/排序
评论
equals
equals(x: Any): Boolean
T
==
==
Int