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 を非公開にしたいとさえ思います。
それについて何か考えはありますか?