Scala:在扩展类时预初始化val

Ste*_* K. 4 scala initialization traits

如何预先初始化val并在Scala中扩展类?

例如:

object Start {
  def main(args: Array[String]): Unit = {
        new T()
        new T2()
        //T3?
  }
}

class T extends{val z = 10} with X  with Y
class T2 extends X with Y {val z=10}
//class T3 extends{val z = 10}  ??? Z with X with Y //????

class Z

trait  X {
  val z :Int
}

trait Y { this :X =>
  println("Test: "+z)  
}
Run Code Online (Sandbox Code Playgroud)

gzm*_*zm0 5

使用:

class T3 extends {val z = 10} with Z with X with Y
Run Code Online (Sandbox Code Playgroud)

Scala语言规范2.9,5.1.6:

EarlyDefs ::= ‘{’ [EarlyDef {semi EarlyDef}] ‘}’ ‘with’
Run Code Online (Sandbox Code Playgroud)

所以早期的定义总是必须遵循awith