Aquí es una simplificación de las clases que tengo:En Scala, ¿puedo anular un campo concreto que contiene una lista y anexarle algo en la subclase?
trait RequiredThings {
val requiredThings: Seq[String]
}
class SimpleCalculator with RequiredThings {
val requiredThings = List("a", "b")
}
class ComplicatedCalculator extends SimpleCalculator with RequiredThings {
self: SimpleCalculator =>
override val requiredThings:List[String] = List("c") ::: self.requiredThings
}
En esta versión, estoy usando una anotación de tipo auto, pero no estoy completamente seguro de que es el camino a seguir. Creo que probablemente podría hacerlo funcionar convirtiendo el requiredThings
en un método completo, pero me gustaría probarlo como campo.
solución final:
trait RequiredThings {
def requiredThings: Seq[String]
}
class SimpleCalculator with RequiredThings {
def requiredThings = List("a", "b")
}
class ComplicatedCalculator extends SimpleCalculator with RequiredThings {
override def requiredThings:List[String] = List("c") ::: super.requiredThings
}
Esto es lo que terminé haciendo. He actualizado la pregunta con la versión final de mi código. –
"Esto cambiará (algo) pronto". No recuerdo de la lista de correo donde alguien dijo que esto podría cambiar. ¿Podrías mostrarme dónde obtuviste esa información? Gracias. – Eric
@Eric: no estoy seguro si esto se ha publicado alguna vez en la lista de correo, pero estoy en el equipo de Scala, y Martin ha aceptado (en principio) esa característica. Mientras tanto, me empantané con otras cosas, y hay algunos problemas de implementación no triviales. –