Поддерживает ли 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