2013-05-02 24 views
4

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

如:

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

回答

5

用途:

class T3 extends {val z = 10} with Z with X with Y 

Scala语言规范2.9,5.1.6:

EarlyDefs ::= ‘{’ [EarlyDef {semi EarlyDef}] ‘}’ ‘with’ 

所以早期的定义总是必须后跟a with

+0

酷 - 我正要张贴了一堆垃圾约把VAL在中间类,或使用DelayedInit。甚至不知道早期的成员定义是一件事情。 – Nick 2013-05-02 21:48:45

+0

T已经做早期成员定义又名。预先初始化一个值,但它并没有跨越我的想法使用'与Clazz'。斯卡拉称赞一致性在这里有一个划痕。 – 2013-05-03 01:35:28

+0

@StefanK。恕我直言,不是真的。它总是'extend',后面跟着'with'。与Java不同,'extend'不能用于类,你也可以编写'class A extends SomeTrait'。 – gzm0 2013-05-03 14:40:53