Wyobraź sobie:Jaki wpływ ma stosowanie wszystkich tych cech Scala w czasie wykonywania?
val myObject = if(someCondition) {
new Whatever with Trait1
} else if(otherCondition) {
new Whatever with Trait2 with Trait3 with Trait4
} else {
new Whatever with Trait5
}
jest przedmiotem myObject
„złożony” w czasie wykonywania, czy kompilator Scala wystarczająco inteligentny, aby wygenerować odpowiedni kod w czasie kompilacji? Jaki wpływ na wydajność ma kod, jeśli masz wiele miejsc, które stosują cechy, jak w powyższym kodzie?
Moje dodatki: Jest to cena, jaką należy zapłacić za życie w świecie Java Dziedzictwo Pojedyncze: Cechy muszą być * pieczone w *, ponieważ nie ma sposobu na dostosowanie Rozkazu Rozdzielczości Metody SI (MRO). (Jest to podobne do cech w Squeak ST, ale znacznie różni się od cech Ruby, które faktycznie zmieniają MRO). Oznacza to również, że zmiana cechy bez rekompilacji modułu za pomocą cechy może prowadzić do dość ciekawych sytuacji ... to samo można argumentować za normalną klasą. –