如何预先初始化val并在Scala中扩展类?
e.g:
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)
}
答案 0 :(得分:5)
使用:
class T3 extends {val z = 10} with Z with X with Y
Scala语言规范2.9,5.1.6:
EarlyDefs ::= ‘{’ [EarlyDef {semi EarlyDef}] ‘}’ ‘with’
因此,早期定义始终必须后跟with
答案 1 :(得分:0)
点击此处查看scala book中编程的一些示例
Scala: Example use for early definition / early initializer / pre-initialized fields