Я просмотрел документацию по , и кажется, что Google Dart не поддерживает mixins (никаких методов в интерфейсах, без множественного наследования, без Ruby- аналогичные модули). Правильно ли я об этом, или есть другой способ иметь миксин-подобные функции в Dart?
Поддерживает ли Google Dart mixins?
Ответ 1
Я рад сообщить, что ответ теперь да!
Mixin - это просто дельта между подклассом и суперклассом. Затем вы можете "смешать" эту дельту с другим классом.
Например, рассмотрим этот абстрактный класс:
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
Некоторое дополнительное чтение:
Ответ 2
Нет, он не поддерживает микс (пока): https://groups.google.com/a/dartlang.org/group/misc/msg/0865bc828bc248e4
Ответ 3
Изменить:
Команда Dart теперь выпустила свое предложение для Mixins, оригинальное вопрос для Mixins был здесь.
Он еще не реализован, но тем временем я выпустил расширяемую библиотеку Mixins для Dart, которая включает в себя порт популярной функциональной библиотеки Underscore.js: https://github.com/mythz/DartMixins