Hãy tưởng tượng này:Loại tác động nào áp dụng tất cả các đặc điểm Scala này trong thời gian chạy?
val myObject = if(someCondition) {
new Whatever with Trait1
} else if(otherCondition) {
new Whatever with Trait2 with Trait3 with Trait4
} else {
new Whatever with Trait5
}
là đối tượng myObject
"sáng tác" trong thời gian chạy, hoặc là trình biên dịch scala đủ thông minh để tạo mã thích hợp ở thời gian biên dịch? Loại tác động hiệu suất nào sẽ có trên mã nếu bạn có nhiều địa điểm áp dụng các đặc điểm như trong mã ở trên?
Ngoài ra: Đó là giá phải trả để sinh sống trong Thế giới Java đơn thừa (SI): Các đặc điểm phải được * nướng trong * vì không có cách nào để điều chỉnh Thứ tự độ phân giải phương pháp SI (MRO). (Điều này tương tự như các đặc điểm trong Squeak ST nhưng khác nhiều so với các đặc điểm trong Ruby thực sự làm thay đổi MRO). Điều này cũng có nghĩa là thay đổi một đặc điểm mà không biên dịch lại mô-đun bằng cách sử dụng đặc điểm có thể dẫn đến một số tình huống khá thú vị ... sau đó một lần nữa, điều tương tự có thể được lập luận cho các lớp bình thường. –