簡體   English   中英

應用所有這些 Scala 特征在運行時會產生什么樣的影響?

[英]What kind of impact does applying all these Scala traits have at runtime?

想象一下:

val myObject = if(someCondition) {
    new Whatever with Trait1
} else if(otherCondition) {
    new Whatever with Trait2 with Trait3 with Trait4
} else {
    new Whatever with Trait5
}

myObject object 是在運行時“組合”的,還是 scala 編譯器足夠聰明,可以在編譯時生成適當的代碼? 如果您有多個應用上述代碼中的特征的地方,它將對代碼產生什么樣的性能影響?

它是在編譯時組成的

特征將作為接口添加到結果類型,並且來自這些特征的任何具體方法將(通常)被完整地復制到 class。

有時,編譯器可能必須通過轉發器向 static 方法提供具體實現,但通常情況並非如此。

Scala 將創建三個匿名類(除了最后一個條件是語法錯誤)。

注意:這些類將使用它們在 scope 中定義的順序來命名。 所以... OuterClass$anon$1 -> 3. 請避免在任何長期 Java 序列化中使用這些匿名類,因為這會鎖定代碼中匿名類的順序。

除此之外,這是一個很棒的便利功能!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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