Tôi đã lướt qua số language documentation và có vẻ như Google Dart không hỗ trợ mixin (không có các đối tượng phương thức trong giao diện, không có nhiều thừa kế, không có mô-đun giống Ruby). Tôi có đúng về điều này không, hoặc có cách nào khác để có chức năng mixin giống như trong Dart không?Google Dart có hỗ trợ mixin không?
Trả lời
Tôi vui mừng thông báo rằng câu trả lời là có!
Một mixin thực sự chỉ là delta giữa một phân lớp và một lớp cha. Sau đó bạn có thể "trộn" đồng bằng đó với một lớp khác.
Ví dụ, hãy xem xét lớp trừu tượng này:
abstract class Persistence {
void save(String filename) {
print('saving the object as ${toJson()}');
}
void load(String filename) {
print('loading from $filename');
}
Object toJson();
}
Sau đó bạn có thể kết hợp này vào các lớp khác, như vậy tránh được tình trạng ô nhiễm của cây thừa kế.
abstract class Warrior extends Object with Persistence {
fight(Warrior other) {
// ...
}
}
class Ninja extends Warrior {
Map toJson() {
return {'throwing_stars': true};
}
}
class Zombie extends Warrior {
Map toJson() {
return {'eats_brains': true};
}
}
Hạn chế về định nghĩa mixin bao gồm:
- không Phải khai báo một constructor
- lớp cha là Object
- Không chứa các cuộc gọi đến siêu
Một số đọc thêm:
Không, nó không hỗ trợ mix-in (chưa): https://groups.google.com/a/dartlang.org/group/misc/msg/0865bc828bc248e4
Edit:
Đội Dart có bây giờ released their proposal for Mixins, bản gốc issue for Mixins was here.
Nó chưa được thực hiện, nhưng trong khi chờ đợi tôi đã phát hành một thư viện mở rộng cho mixins Dart trong đó bao gồm một cổng của thư viện tiện ích chức năng phổ biến Underscore.js: https://github.com/mythz/DartMixins
bạn có thể muốn nâng cấp lên câu trả lời hiện đúng :) –