2013-06-14 8 views
6

sto guardando oltre la documentazione per Scalatra e ho notato un interessante frammento di codice per la sintassi non ho visto ancora il: http://www.scalatra.org/2.2/guides/persistence/introduction.htmlScala sintassi tratto

In particolare, si tratta di questo bit:

trait DatabaseSessionSupport { this: ScalatraBase => 
    import DatabaseSessionSupport._ 

tutto qui ha senso tranne per il segmento this: ScalatraBase =>. Che significato ha qui? È specifico per l'importazione di seguito o per l'intero tratto?

risposta

5

Si tratta di un'annotazione di tipo "self-type" e richiede che qualsiasi utilizzo di trait DatabaseSessionSupport in una classe istantiable sia accompagnato da ("miscelato con") un tipo coerente con ScalatraBase. Non ho guardato questo codice specifico, ma è molto probabilmente un uso del cosiddetto "Pattern Cake".

È possibile trovare molti trattamenti di questo concetto sia in Stack Overflow, in vari blog e in una carta classica di Odersky et. al. intitolato "Scalable Component Abstractions".

+0

Ottima risposta, aiuta immensamente. Grazie. – randombits