在scala中创建新对象后的代码块

时间:2017-01-21 06:26:08

标签: scala constructor

我有一个构造函数定义为

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相同的代码块被执行就像它是构造函数的一部分一样。我不熟悉这个。

有人可以澄清这种行为和/或指向解释这里发挥作用的语义的参考吗?我不确定如何谷歌这一点 - 寻找code block on same line as constructor call scala并没有多大帮助。

1 个答案:

答案 0 :(得分:4)

大致相当于:

#{o := 0} = maps:put(o, 0, maps:new()).

因此,您可以看到初始化顺序来自更抽象的更具体的类。

突出显示@som-snytt指向Scala语言规范的评论:general instance creation expression