【发布时间】:2013-11-13 14:01:36
【问题描述】:
由于发明者强调 Scala 的类型安全性,我不理解允许对象(至少来自 case 类)缺少 equals 方法仅在具有相同类型的对象上检查相等性。我希望有一个方法=== 默认实现此行为。当然,Java 互操作性需要有一个适用于 Any 类型的方法,但在许多情况下,我只想检查相同类型的对象之间的相等性。
我为什么需要它?
例如,我有两个案例类并从中创建对象
case class Pos(x: Int, y: Int)
case class Cube(pos: Pos)
val startPos = new Pos(0, 0)
val cubeOnStart = new Cube(startPos)
后来我需要检查几次位置,不小心写了
if (startPos == cubeOnStart) {
// this code will never be executed, but unfortunately this compiles
}
但是意思
if (startPos == cubeOnStart.pos) {
// this code can be executed if positions are equal
}
如果=== 方法可用,我会凭直觉使用它。
是否有充分的理由或解释为什么缺少这种方法?
【问题讨论】:
-
这个问题在 Dotty 中得到解决,见scala-lang.org/blog/2016/05/06/multiversal-equality.html