想象一下:在運行時應用所有這些Scala特徵會產生什麼樣的影響?
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
對象在運行時「組成的」,或者是Scala編譯器足夠聰明,在編譯時產生相應的代碼?如果您有多個地方應用上述代碼中的特徵,那麼它對代碼會產生怎樣的性能影響?
我除了(S):這是要生活在一個單繼承(SI)的Java世界的價格:性狀必須*烤*因爲沒有辦法調整的SI方法解析順序(MRO)。 (這與Squeak ST中的特徵類似,但與Ruby中的特徵實際上改變了MRO的特徵大不相同)。這也意味着,改變性狀而無需重新編譯使用性狀可以導致一些頗爲有趣的情況下,該模塊......還是那句話,同樣可以說爲正常類。 – 2011-06-30 17:38:23