Я пытаюсь определить новый тип, который может вести себя по существу как число (для конкретности, скажем, Double
). Я хотел бы перегрузить операторы этого типа, и я мог бы сделать это явно, но чтобы избежать повторения, я хотел бы воспользоваться преимуществами методов в NumericOps
, которые определены в терминах абстрактных методов в Numeric
. Насколько я понимаю, я должен иметь возможность просто переопределить методы в Numeric
и получить другие бесплатно.
Вот самая простая попытка, которую я могу придумать:
class Container(val value: Double) extends Numeric[Container] {
override def plus(x: Container, y: Container): Container =
new Container(x.value + y.value)
// override minus, times, etc.
override def toString: String = value.toString
}
println(new Container(1) + new Container(1))
Однако это дает мне ошибку несоответствия типов.
Мое понимание последствий все еще довольно шатко, но я бы подумал, что implicit def mkNumericOps(lhs: Container): NumericOps
, унаследованный Container
, спасет день, неявно преобразовав два объекта Container
, являющихся добавил к NumericOps
объектам, а затем добавил их, используя метод +
, определенный в терминах Container.plus
.
Что я здесь не так делаю и как я могу это исправить?