La respuesta es "circularidad". Pero no solo.
La anotación del tipo de auto resuelve para mí el problema fundamental de la herencia: lo que heredas no puede usar lo que eres. Con el tipo de auto, todo se vuelve fácil.
Mi patrón es el siguiente y se puede considerar como una torta degenerado:
trait A { self: X => def a = reuseme}
trait B { self: X => def b = a }
class X extends A with B { def reuseme=null }
Puede explotar su clase en múltiples comportamientos que pueden ser llamadas desde cualquier parte del montaje, mientras que permanece limpiamente mecanografiado. No es necesaria la indirecta dolorosa con demasiada frecuencia (e incorrectamente) identificada con el patrón de tortas.
La mitad (si no la totalidad) de los intrincados marcos de Java DI de los últimos diez años se han dedicado a hacer esto, por supuesto, sin el tipeo. Las personas que todavía usan JAVA en este dominio están perdiendo el tiempo: "SCALA ouakbar".
duplicado exacto de http://stackoverflow.com/questions/1990948/what-is-the-difference-between-scala-self-types-and-trait-subclasses, que es la primera pregunta que aparece en la lista relacionada . –