Поддерживает ли Google Dart миксины?
Я просмотрел язык документации и кажется, что Google Dart не поддерживает mixins (нет тел методов в интерфейсах, нет множественного наследования, нет Ruby-подобных модулей). Я прав об этом, или есть другой способ иметь mixin-подобную функциональность в Dart?
3 ответов
Я рад сообщить, что ответ да!
миксин-это просто дельта между подклассом и суперклассом. Затем вы можете" смешать " эту дельту с другим классом.
например, рассмотрим этот абстрактный класс:
abstract class Persistence {
void save(String filename) {
print('saving the object as ${toJson()}');
}
void load(String filename) {
print('loading from $filename');
}
Object toJson();
}
затем вы можете смешать это с другими классами, избегая тем самым загрязнения дерева наследования.
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};
}
}
ограничения на определения mixin включают в себя:
- не должен объявлять конструктор
- суперкласс объекта
- не содержит вызовов super
некоторые дополнительные чтения:
нет, он не поддерживает миксы (пока):https://groups.google.com/a/dartlang.org/group/misc/msg/0865bc828bc248e4
Edit:
команда дротиков теперь выпустили свое предложение для Mixins оригинал выпуск для Mixins был здесь.
Он еще не реализован, но тем временем я выпустил расширяемую библиотеку Mixins для Dart, которая включает порт популярного подчеркивания.библиотека функциональных утилит js:https://github.com/mythz/DartMixins