2011-05-27 29 views
9

Soy nuevo en Scala y en el libro Programming Scala de O'Reilly los autores muestran algún código que ejemplifica un rasgo. Dado que los rasgos son algo análogos a las interfaces en Java (aunque sé que los rasgos se implementan como clases en el código de bytes), ¿qué significa instanciar un rasgo, y cuál sería un patrón de caso de uso/diseño apropiado para esto?¿Qué significa instanciar un rasgo?

Ej:

scala> val x = new T1 with T2 { type z = String val v: z = "Z" } 
x: java.lang.Object with T1 with T2{type z = String; def zv: this.z} = [email protected] 

Respuesta

17

Soy bastante nuevo a Scala así, pero creo que el ejemplo que has anterior está creando un nuevo objeto anónimo (como se puede hacer con Java), y luego adjuntar el Rasgo al nuevo tipo anónimo.

Dado que Scala Traits puede contener código de implementación, básicamente obtienes el comportamiento del Rasgo de forma gratuita, suponiendo que la clase anónima satisface los requisitos del Rasgo (como tener valores establecidos o definir métodos "abstractos").

Así que lo que está haciendo aquí no es instanciar el Rasgo directamente, sino crear un objeto adecuado para que el Rasgo se adhiera para que pueda usar la funcionalidad del Rasgo sin necesidad de definir una clase que amplíe el Rasgo.

¿Eso responde su pregunta?

+1

Sí, eso tiene mucho sentido, gracias! +1 –