2011-12-03 20 views
5

Eventuali duplicati:
What is the difference between scala self-types and trait subclasses?Utilizzare questa parola chiave per ereditare?

Da example in scalatest site. C'è una cosa particolare che non capisco

trait FunSuiteStackBehaviors { 
        this: FunSuite => //This line 
         def a() {} 
         def b() {} 
} 

class StackFunSuite extends FunSuite with FunSuiteStackBehaviors {} 

Per quanto ho capito, sembra che si cerca di assegnare alcuni defs in un tratto. Ma cosa fa la parte this: FunSuite =>? Ho provato a utilizzare Extends FunSuite invece come

trait FunSuiteStackBehaviors extends FunSuite { 
         def a() {} 
         def b() {} 
} 

class StackFunSuite extends FunSuite with FunSuiteStackBehaviors {} 

e continuo a ottenere lo stesso risultato. Sono la stessa cosa ?

+0

È un tipo di auto. http://stackoverflow.com/questions/1990948/what-is-the-difference-between-scala-self-types-and-trait-subclasses http://stackoverflow.com/questions/tagged/self-type – retronym

+0

Hmm . quelle domande non si presentano quando provo a cercare. Grazie per la segnalazione. –

risposta

0

this: FunSuite => viene chiamato annotazione di tipo automatico. Non c'è niente di speciale su "this" Entrambi i frammenti sono equivalenti. Hereis qualche discussione sulla sua logica. In breve annotazione di tipo automatico consente di indicare la natura compositional anziché la relazione IS-A.

Problemi correlati