En la actualidad, la tara sintáctica de las clases de tipos de Scala es un poco mayor que para la subtipificación a través de la herencia de rasgos, como lo es la sobrecarga del tiempo de ejecución potencial. Imagine un caso en el que necesita tener cincuenta tipos diferentes de eventos conforme a una interfaz para admitir un motor de procesamiento de eventos.Mucho más fácil escribir
class MyEvent extends Event{
val name = "foo"
}
que
class MyEvent{
val name = "foo"
}
object MyEvent2Event{
implicit def convert(myEvent:MyEvent) = new Event{ val name = myEvent.name}
}
La segunda forma permite mucha más flexibilidad en términos de polimorfismo post-hoc, la libertad de nombrar, y malo-assery general, pero escribiendo a cabo los cincuenta los métodos de conversión y luego hacer las importaciones apropiadas cuando se necesita la clase de tipo va a llegar a ser un dolor correcto. Si no necesita la flexibilidad, es difícil ver la recompensa. Además, está esa molesta palabra clave "nueva" en el segundo, que generará un sinfín de "es esto sobreestresar los argumentos del recolector de basura".
La situación es peor para la herencia mixin que introduce el estado mutable. Considere el rasgo siguiente, tomado del código de producción:
trait Locking{
private val lock = new ReentrantReadWriteLock()
def withReadLock[T](body: => T):T={
try{
lock.readLock.lock()
body
}finally{
lock.readLock.unlock()
}
}
// same for withWriteLock
}
uso increíblemente útil de la herencia mixin, y no es realmente factible con clases de tipo Scala, debido a la presencia del val "bloqueo". ¿A dónde debería ir? Si lo coloca en la clase adaptada, perderá la mayor parte del valor de encapsulación del rasgo. Si lo pones en el código del adaptador, los bloqueos ya no protegen nada, ya que estarías bloqueando diferentes objetos de bloqueo cada vez que te adapten.
@JoshD: No puedo encontrar ninguna relación entre esas dos preguntas, y mucho menos considerarlos duplicados. –
@Jim: qué diplomático de usted. – JoshD
Al menos acortar eso a "WTF" - ¿no haría que mucha gente se sintiera contaminada y preguntara si debía participar en esa clase de conversación? En segundo lugar, parece que ya sabes la respuesta. Si es así, responda su propia pregunta para que la gente como yo pueda recibir una educación adecuada. –