[英]code block following creation of new object in scala
我有一個構造函數定義為
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
尋找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
所以你可以看到初始化順序從更抽象到更具體的類。
突出顯示指向 Scala 語言規范的@som-snytt 注釋: 通用實例創建表達式
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.