gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:53:34 25 4
gpt4 key购买 nike

我有一个构造函数定义为

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没有多大帮助。

最佳答案

它大致相当于:

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 语言规范的评论: general instance creation expression

关于scala - 在scala中创建新对象后的代码块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41776392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com