¿Hay alguna manera de confiar en los métodos definidos en la clase de caso en un rasgo? Por ejemplo, copia: lo siguiente no funciona. Aunque no estoy seguro de por qué.confíe en los métodos de la clase de caso en el rasgo
trait K[T <: K[T]] {
val x: String
val y: String
def m: T = copy(x = "hello")
def copy(x: String = this.x, y: String = this.y): T
}
case class L(val x: String, val y: String) extends K[L]
Da:
error: class L needs to be abstract, since method copy in trait K of type
(x: String,y: String)L is not defined
case class L(val x: String, val y: String) extends K[L]
^
¿Por qué crees que el compilador puede llegar a una implementación (que hace lo que quieres) para cualquier firma de método? – Raphael
Realmente no me importa, idealmente ni siquiera necesitaría definir una copia en el rasgo, y podría marcar de alguna manera que el rasgo solo se puede mezclar en las clases de casos. ¿Es eso posible? –
No obtengo lo que quieres. Un método tiene que ser definido o abstracto, no hay "tal vez". – Raphael