Подтвердить что ты не робот

Поддерживает ли Google Dart mixins?

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

4b9b3361

Ответ 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

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

Ответ 3

Изменить:

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

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