当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在Scala中创建新对象后的代码块》经验,为你挑选了1个好方法。

我有一个构造函数定义为

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无济于事。



1> dk14..:

大致相当于:

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语言规范的注释:通用实例创建表达式

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有