Поддерживает ли Google Dart микширование?

#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