2011-09-21 33 views
8

Ben tekil nesnelerle stackable trait pattern kullanmak istiyorum, ama mutlu derleyici nasıl bulmak gibi olamaz: repl bu değerlendirmek için çalışılıyorİstiflenebilir özellik kalıbı tekil nesnelerle kullanılabilir mi?

abstract class Pr { 
    def pr() 
} 

trait PrePostPr extends Pr { 
    abstract override def pr() { 
    println("prepr") 
    super.pr() 
    println("postpr") 
    } 
} 

object Foo extends Pr with PrePostPr { 
    def pr() = println("Foo") 
} 

aşağıdaki hata üretir:

<console>:10: error: overriding method pr in trait PrePostPr of type()Unit; 
method pr needs `override' modifier 
     def pr() = println("Foo") 

cevap

13
O can

, ama böyle:

abstract class Pr { 
    def pr() 
} 

trait PrePostPr extends Pr { 
    abstract override def pr() { 
    println("prepr") 
    super.pr() 
    println("postpr") 
    } 
} 

class ImplPr extends Pr { 
    def pr() = println("Foo") 
} 

object Foo extends ImplPr with PrePostPr 

uygulama süper sınıf/supertraits birinde mevcut olmak zorundadır. Soyut modifikasyon özelliği, miras listesindeki uygulama ile sınıf/özellikten sonra gelmelidir.

+0

Ah, açıklama için teşekkürler! – srparish

+0

Aynı adı kullanmak güzel görünüyor, bu yüzden "Foo" sınıfını adlandırabilir ve daha sonra "Foo" nesnesini "Foo" sınıfına taşıyabilirim. – srparish

+0

Evet, yani - bu durumda Foo nesnesine 'Foo' sınıfının eşlik eden nesnesi denir. – axel22

İlgili konular