es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo copiar una clase de caso con su rasgo?

Tengo lo siguiente:
scala
scala> trait Cola
scala> case class Gato(nombre: String)
scala> val aa = new Gato(nombre = "bob")
val aa: Gato with Cola = Gato(ben)
scala> val bb = aa.copy(nombre = "ted")
val bb: Gato = Gato(ted)

¿Por qué no heredó bb el rasgo Cola?

¿Cómo puedo copiar aa y aún así conservar el rasgo?

Tags:  ,

Answer

  1. Avatar for davy.ai

    La razón por la cual bb no heredó el rasgo de Tail es porque no fue incluido en el método copy. Cuando se copia una clase de caso, sólo se copiarán los atributos especificados en la nueva instancia.

    Para copiar aa y aún así preservar el rasgo de Tail, se puede incluir en el método copy de esta manera:

    scala> trait Tail
    scala> case class Cat(name: String) extends Tail // incluir el rasgo en la clase de caso
    scala> val aa = new Cat(name = "bob")
    val aa: Cat with Tail = Cat(bob)
    scala> val bb = aa.copy(name = "ted")
    val bb: Cat with Tail = Cat(ted) // la nueva instancia también incluye el rasgo de Tail
    

Comments are closed.