#mixins #dart
#микширование #dart
Вопрос:
Я просмотрел языковую документацию, и кажется, что Google Dart не поддерживает микшины (нет тел методов в интерфейсах, нет множественного наследования, нет Ruby-подобных модулей). Я прав в этом, или есть другой способ использовать функциональность, подобную микшированию, в Dart?
Комментарии:
1. возможно, вы захотите обновить текущий правильный ответ 🙂
Ответ №1:
Я рад сообщить, что ответ теперь да!
Микширование — это просто дельта между подклассом и суперклассом. Затем вы можете «смешать» эту дельту с другим классом.
Например, рассмотрим этот абстрактный класс:
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};
}
}
Ограничения на определения микширования включают:
- Не должен объявлять конструктор
- Суперкласс — это объект
- Не содержит вызовов super
Некоторые дополнительные сведения:
Ответ №2:
Редактировать:
Команда Dart выпустила свое предложение для Mixins, оригинальная проблема для Mixins была здесь .
Это еще не реализовано, но тем временем я выпустил расширяемую библиотеку Mixins для Dart, которая включает порт популярного Underscore.js функциональная библиотека утилит: https://github.com/mythz/DartMixins