为什么飞镖不允许混合继承



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'不能用作混合,因为它扩展了对象以外的类">

我知道你会回答以下内容工作正常:

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

但是我正在设计一个库,它将导出一些共享一些常见功能的 mixin(由基本 mixin 提供(,witch 与他们的行为相关,但与我的库客户端无关。

如果可能的话,我什至想让这个基础混合成为私有的。

对此有什么想法吗?

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

这就是我从吉拉德·布拉查(飞镖规格背后的大脑(的演讲中收集到的(快进到相应的部分(: http://youtu.be/yXY5bGlhxlw?t=18m42s

最新更新