12

我浏览了语言文档,似乎 Google Dart 不支持 mixins(接口中没有方法体,没有多重继承,没有类似 Ruby 的模块)。我对此是否正确,或者是否有另一种方法可以在 Dart 中具有类似 mixin 的功能?

4

2 回答 2

9

我很高兴地报告,现在答案是肯定的!

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 的调用

一些额外的阅读:

于 2013-04-27T03:32:58.280 回答
2

编辑:

Dart 团队现在已经发布了他们的 Mixins 提案,Mixins的原始问题在这里

它还没有实现,但与此同时,我发布了一个可扩展的 Dart Mixins 库,其中包括流行的 Underscore.js 功能实用程序库的端口:https ://github.com/mythz/DartMixins

于 2012-05-02T04:48:04.967 回答