由于发明者强调了Scala的类型安全性,我不理解对象(至少来自案例类)缺少 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
}
如果有一种方法===
可用,我会凭直觉使用它。
缺少这种方法是否有充分的理由或解释?