2013-06-14 15 views
6

özellik dizimi:Scala Ben Scalatra belgelerine bakarak ve henüz üzerinde görmedim sözdizimi için kod ilginç bir pasajı fark ediyorum

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

her şey: Özellikle http://www.scalatra.org/2.2/guides/persistence/introduction.html

, bu biraz Burada this: ScalatraBase => segmenti dışında mantıklı. Burada ne önemi var? Aşağıdaki içe aktarma veya tüm özellik için spesifik mi?

cevap

5

Buna "self-type not" denir ve bir anlık sınıfta trait DatabaseSessionSupport kullanımının ScalatraBase ile tutarlı bir türle ("mixed in with") eşlik etmesi gerekir. Bu özel koda bakmadım, ama büyük olasılıkla sözde "Kek Kalıbı" nın kullanımı.

Bu konseptin pek çok bakımını hem Yığın Taşması'nda hem de çeşitli bloglarda ve Odersky et. ark. başlıklı "Scalable Component Abstractions."

+0

Harika cevap, çok yardımcı olur. Teşekkür ederim. – randombits