使用cake patern时初始化trait属性

时间:2016-02-25 08:15:54

标签: scala initialization traits cake-pattern

是否可以在蛋糕模式的封闭特征中初始化属性?与早期初始化程序类似的东西。例如:

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
  }
}

1 个答案:

答案 0 :(得分: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 无法覆盖 var

有一篇文章可以帮助您:cake pattern