Поддерживает ли Google Dart миксины? - PullRequest
12 голосов
/ 10 октября 2011

Я пролистал документацию по языку и похоже, что Google Dart не поддерживает миксины (нет тел методов в интерфейсах, нет множественного наследования, нет Ruby-подобных модулей) Правильно ли я в этом или есть другой способ иметь миксиноподобную функциональность в Dart?

Ответы [ 3 ]

9 голосов
/ 27 апреля 2013

Я рад сообщить, что ответ теперь да!

Миксин - это на самом деле просто дельта между подклассом и суперклассом.Затем вы можете «смешать» эту дельту с другим классом.

Например, рассмотрите этот абстрактный класс:

 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};  
  }  
 } 

Ограничения на определения миксинов включают:

  • Не должен объявлять конструктор
  • Суперкласс - это Object
  • Не содержитзвонки на супер

Некоторые дополнительные чтения:

5 голосов
/ 10 октября 2011

Нет, он не поддерживает дополнения (пока): https://groups.google.com/a/dartlang.org/group/misc/msg/0865bc828bc248e4

2 голосов
/ 02 мая 2012

Редактировать:

Команда Dart уже выпустила свое предложение для Mixins , оригинальная проблема для Mixins была здесь .

Это нереализован, но пока что я выпустил расширяемую библиотеку Mixins для Dart, которая включает в себя порт популярной библиотеки функциональных утилит Underscore.js: https://github.com/mythz/DartMixins

...