Поскольку изобретатели подчеркивают Scala тип безопасности, я не понимаю отсутствие метода equals на объектах (по крайней мере, из классов case), что позволяет проверять равенство только на объектах одного типа. Я бы хотел, чтобы метод ===
реализовал это поведение по умолчанию. Разумеется, необходимо, чтобы Java-совместимость имела метод, который работает с типом Any
, но во многих случаях я хочу проверить только равенство между объектами того же типа.
Зачем мне это нужно?
Например, у меня есть два класса case и создаю из него объекты
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
}
Если бы был доступен метод ===
, я бы использовал его по интуиции.
Есть ли веская причина или объяснение, почему такой метод отсутствует?