簡體   English   中英

在 Scala 中創建新對象后的代碼塊

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM