2011-04-24 10 views
16

Estoy tratando de usar un rasgo como mixin con una clase de caso.Clases de casos de Scala con rasgos Mixin

case class Team(name:String) 

trait WinStreak{} 

y me gustaría usarlo de esta manera:

val team = Team("name") with WinStreak 

Al parecer, yo no puedo hacer esto. ¿Esto se debe a que las clases de casos usan el objeto complementario para crear una instancia de tu clase? Sé que la otra solución sería extender el rasgo en mi definición de clase, pero me gustaría saber si es posible crearlo al estilo Mixin.

Respuesta

26

Porque Team("name") es en realidad una llamada a método Team.apply("name"), que crea el objeto dentro del método apply.

crear el objeto utilizando la palabra clave new debe hacer el truco:

case class Team(name:String) 
trait WinStreak{} 

val x = new Team("name") with WinStreak 
+1

buen punto. Me acabo de dar cuenta de que al usar las clases de casos no puede usar un constructor privado y no permitir el acceso al constructor ... Gracias por señalarlo. –

Cuestiones relacionadas