Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 如何在没有继承的情况下使用mixin?_Dart_Mixins - Fatal编程技术网

Dart 如何在没有继承的情况下使用mixin?

Dart 如何在没有继承的情况下使用mixin?,dart,mixins,Dart,Mixins,在目标类不从任何其他类继承的情况下,是否可以对类应用mixin?例如,我是否可以实现以下功能: class User with Persistence { // implementation } dart中的大多数mixin示例似乎都与继承相结合 提前谢谢 如果要使用mixin,必须从另一个类继承。但是,您可以简单地从对象继承: 类用户使用持久性扩展对象{ //实施 } 但实际上,您也可以从持久性继承,这将产生相同的效果: 类用户扩展持久性{ //实施 } Gilad Bracha认为

在目标类不从任何其他类继承的情况下,是否可以对类应用mixin?例如,我是否可以实现以下功能:

class User with Persistence {
  // implementation
}
dart中的大多数mixin示例似乎都与继承相结合


提前谢谢

如果要使用mixin,必须从另一个类继承。但是,您可以简单地从对象继承:

类用户使用持久性扩展对象{
//实施
}
但实际上,您也可以从持久性继承,这将产生相同的效果:

类用户扩展持久性{
//实施
}
Gilad Bracha认为语法是专门设计的:

我认为理解这里的语义模型很重要。“与” 是mixin应用程序操作符,它接受两个参数:a 超类和一个mixin,并生成一个类。在英语中说“和福在一起” 隔离就像说>>2一样有意义(你可以同时解释两者) 作为curried函数,但这与Dart相差甚远)。当你写作时 “C用M扩展S”,则在 extends关键字,就像编写“C extends K”时一样,除了 超类不是通过标识符指定的,而是通过mixin指定的 应用所以超类应该是“S加M”

正如Lasse指出的,作为一个实际问题,它并不限制你,但是 让语法反映底层结构很重要


根据Gilad的解释,如果
with
是一个操作符,那么将超类和一个mixin作为操作数并返回一个新类的,那么代码
类C用M扩展s
将等同于
类C扩展(s用M)
好像说
C
扩展了一个类,这个类是
M
S
混合的结果。我被混合弄糊涂了,@lrn给了我这个解释,这也是一个有用的观点。然而,我的问题是,如果不考虑从超级类扩展到目标类,我就不能混入类中@Pixel Elephant建议在需要时扩展
对象
,这可以帮助我做到这一点。Gilad的解释完全正确。您可以认为Dart只有一个混入操作,
class X=Y和Z,其他一切都可以简化为该代码。当你有
类C扩展D与E类DwithE=D加E;C类使用…
扩展数据。当你有
。。。D和E,F…
,实际上是
类DwithE=D和E;类DwithEF=DwithE和F。。。DwithEF…
。您可以内联编写“类C扩展了D,带有E,F{”,但它确实引入了两个额外的匿名类,超类链是
DwithEF
DWithE
D
Object