2016-02-25 5 views
0

Возможно ли инициализировать атрибут в закрытом признаке шаблона пирога? Что-то похожее на ранние инициализаторы. Например:Инициализация атрибута атрибута при использовании pake patern

object CakePatternInit { 

    trait A { 
    var prop: String = null 
    } 

    trait A1 extends A 

    trait B { 
    this: A => 
    println(prop.toUpperCase) // I'd like here prop to be initialized already with "abc" 
    } 

    def main(args: Array[String]) { 

    val b = new B with A1 
    // how do I initialize prop here? 
    // can I write something like this: 
    // val b = new B with { prop = "abc" } A1 
    } 
} 
+0

Как об этом: http://stackoverflow.com/questions/35359022/scala-trait-member-initialization-use-traits-to-modify-class-member/35359899#35359899 –

ответ

1
trait A { 
    def prop: String 
    } 

    trait A1 extends A 

    trait B { 
    this: A => 
    println(prop.toUpperCase) // I'd like here prop to be initialized already with "abc" 
    } 

    val t = new B with A1 { def prop = "Hello"} 
    > HELLO 
    > t.prop 
    res22: String = Hello 

Объявить свой prop как метод, потому что не Scala может переопределить вар «s

Существует статья, которая может помочь вам: cake pattern

+0

Дополнительная информация he re: http://docs.scala-lang.org/tutorials/FAQ/initialization-order.html – Adrian