为什么Dart不允许mixin继承?

时间:2013-10-08 17:49:40

标签: dart mixins traits

Dart不像Scala那样支持真正的mixin组合。

library some_lib;

// mixin A
abstract class A {
  String get a => 'A';
}

// mixin B
abstract class B extends Object with A {
  String get b => a + 'B';
}


客户使用

import 'some_lib.dart';

// client usage
class Client extends Object with B {      
  String get c => b + 'C';
}

void main(){
  print(new Client().c); // should print ABC
}

Dart分析器抱怨说“类'B'不能用作mixin,因为它扩展了Object以外的类”

我知道您会回答以下情况正常:

class C extends Object with A, B {
  String get c => a + b;
}

但我正在设计一个库,它将导出一些具有一些共同功能的mixin(由基础mixin提供),这与他们的行为有关,但与我的库客户无关。

如果可能的话,我甚至想把这个基础mixin私有化。

对此有何看法?

1 个答案:

答案 0 :(得分:2)

这方面的规格仍在不断发展。我认为他们打算在未来的版本中实现完全基于mixin的继承。

这是我从Gilad Bracha(飞镖规格背后的大脑)中收集的内容(请快速转发到相应的部分):http://youtu.be/yXY5bGlhxlw?t=18m42s