7

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 として使用できません」と文句を言います。

私はあなたが次のようにうまくいくと答えるだろうと知っています:

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

しかし、いくつかの共通機能 (基本 mixin によって提供される) を共有するいくつかの mixin をエクスポートするライブラリを設計しています。魔女はそれらの動作に関連していますが、私のライブラリ クライアントには関係ありません。

可能であれば、このベース mixin を非公開にしたいとさえ思います。

それについて何か考えはありますか?

4

1 に答える 1

3

この仕様はまだ進化中です。将来のリリースでは完全な mixin ベースの継承を実装するつもりだと思います。

これは、Gilad Bracha (ダーツ スペックの背後にある頭脳) の話 (適切なセクションに早送り) から収集したものです: http://youtu.be/yXY5bGlhxlw?t=18m42s

于 2013-11-17T01:26:29.790 に答える