У меня есть следующие классы:
case class Vec2(x: Int, y: Int) { def +(other: Vec2) = Vec2(x + other.x, y + other.y) }
case class Vec3(x: Int, y: Int, z: Int) { def +(other: Vec3) = Vec3(x + other.x, y + other.y, z + other.z) }
И следующие методы:
def doStuff1(a: Vec2, b: Vec2) = (a, a + b)
def doStuff2(b: Vec3, b: Vec3) = (a, a + b)
Мой вопрос: как я могу объединить эти две функции в один общий с безопасным типом? Классы могут быть изменены любым способом.
Что-то вроде
def doStuff[V](a: V, b: V) = (a, a + b)
очевидно, не будет работать из-за вызова метода "+". Я пробовал всевозможные сумасшедшие вещи (общий базовый класс с абстрактным типом, явно набранные собственные ссылки, отклонения,...), но не смог найти решение.
Лучшей идеей, которую я мог бы придумать, является проверка времени выполнения (сопоставление с образцом или isInstanceOf/asInstanceOf), но это не соответствует требованиям безопасности типа. Я просто думаю/надеюсь, что должен быть лучший способ сделать это.