Tipo de retorno de la Scala polimorfa
Tengo una clase abstracta de ScalaBase
que tiene subclasesDerived1
yDerived2
. Base
define una función f () que devuelve un objeto del mismo tipo que su clase de implementación. Asi queDerived1.f()
devolucionesDerived1
yDerived2.f()
devolucionesDerived2
. ¿Cómo escribo esto en Scala?
Esto es lo que he encontrado hasta ahora.
package com.github.wpm.cancan
abstract class Base {
def f[C <: Base]: C
}
case class Derived1(x: Int) extends Base {
def f[Derived1] = Derived1(x + 1)
}
case class Derived2(x: Int) extends Base {
def f[Derived2] = Derived2(x + 2)
}
Esto da los siguientes errores de compilación:
type mismatch;
[error] found : com.github.wpm.cancan.Derived1
[error] required: Derived1
[error] def f[Derived1] = Derived1(x + 1)
type mismatch;
[error] found : com.github.wpm.cancan.Derived2
[error] required: Derived2
[error] def f[Derived2] = Derived2(x + 2)
Este mensaje de error me resulta confuso porque piensocom.github.wpm.cancan.Derived1
debe ser el mismo queDerived1
en este contexto.