我有一个构造函数定义为
class Test{ var i = 0; println("constructor"); }
我称之为
val t = new Test { println("codeblock"); i = 7; }
结果是:
constructor codeblock defined class Test t: Test = $anon$1@4a7b4f79 res3: Int = 7
因此,我看到与new在同一行上的代码块被执行,就好像它是构造函数的一部分一样。我对此并不熟悉。
有人可以澄清这种行为和/或指向参考来解释此处的语义吗?我不确定如何使用Google进行搜索-寻找code block on same line as constructor call scala
无济于事。
大致相当于:
class Test{ var i = 0; println("constructor"); } class TestImpl extends Test { println("codeblock") i = 7 } scala> new TestImpl constructor codeblock res8: TestImpl = TestImpl@6baf697c scala> res8.i res9: Int = 7
因此,您可以看到初始化顺序从更抽象到更具体的类。
突出显示@ som-snytt的指向Scala语言规范的注释:通用实例创建表达式