Dartlang语法用mixin扩展一个类?

时间:2014-02-04 12:14:49

标签: dart

有人可以解释这个飞镖语法吗?这是在某处记录的吗?

abstract class FixedLengthListBase<E> =
    ListBase<E> with FixedLengthListMixin<E>;

2 个答案:

答案 0 :(得分:5)

这是声明命名的mixin应用程序的语法。引入in the "Mixins in Dart" article

  

它们由一个特殊形式的类声明定义,它给它们一个名称,并声明它们等于mixin到超类的应用,通过with子句给出。

这几乎和写作一样

abstract class FixedLengthListBase<E> extends
    ListBase<E> with FixedLengthListMixin<E>{}

技术差异在于,在这种情况下,FixedLengthListBase不是mixin应用程序本身,而是隐式的,未命名的mixin应用程序的抽象子类ListBase<E> with FixedLengthListMixin<E>

答案 1 :(得分:3)

这是mixin application class声明的形式。

classDefinition:
  metadata abstract? class mixinApplicationClass

mixinApplicationClass:
  identifier typeParameters? '='  mixinApplication ';'

mixin应用程序可用于扩展类;

或者,可以将类定义为mixin应用程序,如本节所述。

mixinApplicationClass:
  identifier typeParameters? '='  mixinApplication ';'
abstract class FixedLengthListBase<E> =
    ListBase<E> with FixedLengthListMixin<E>;

https://www.dartlang.org/docs/spec/latest/dart-language-specification.html#h.trk07h8vrppk