Dart 1.13 是否放宽了混合应用程序的超级接口要求?
Does Dart 1.13 relax superinterface requirements for mixin applications?
在来自 Mixins in Dart 的以下代码中,mixin K
的应用没有产生警告,尽管缺少超接口方法 twice()
:
class S {
twice(int x) => 2 * x;
}
abstract class I {
twice(x);
}
abstract class J {
thrice(x);
}
class K extends S implements I, J {
int thrice(x) => 3* x;
}
class B {
twice(x) => x + x;
}
class A = B with K;
class D {
double(x) => x+x;
}
// E missing 'twice', thus not conforming to
// superinterface S of K. Yet no warning in
// checked mode under Dart 1.13.
class E = D with K;
main() {
/// A conforms to superinterface S of K
assert(new A().twice (1) == 2);
assert(new A().thrice(1) == 3);
/// E conforms to superinterface S of K
//assert(new E().twice (1) == 2); // NoSuchMethod 'twice'
assert(new E().thrice(1) == 3); // thrice() Provided by K
}
我主要只是想填补我理解中的一些漏洞,所以非常感谢有人在这里指出我的问题中的任何误用术语或错误概念。
Dart 版本 1.13 中 mixins 的工作方式发生了变化。它在VM中实现,但还没有在dart2js中实现,我不确定分析器。
仍然,E
是一个非抽象 class,它没有实现自己的接口(实现 I
但没有非抽象 twice
成员)。这应该会导致警告、mixins 或无 mixins。
最重要的是,K
扩展了 S
,因此当使用 K
作为 mixin 时,mixin 应用程序的 superclass 也应该实现 S
D
没有。那应该给出另一个警告。
在来自 Mixins in Dart 的以下代码中,mixin K
的应用没有产生警告,尽管缺少超接口方法 twice()
:
class S {
twice(int x) => 2 * x;
}
abstract class I {
twice(x);
}
abstract class J {
thrice(x);
}
class K extends S implements I, J {
int thrice(x) => 3* x;
}
class B {
twice(x) => x + x;
}
class A = B with K;
class D {
double(x) => x+x;
}
// E missing 'twice', thus not conforming to
// superinterface S of K. Yet no warning in
// checked mode under Dart 1.13.
class E = D with K;
main() {
/// A conforms to superinterface S of K
assert(new A().twice (1) == 2);
assert(new A().thrice(1) == 3);
/// E conforms to superinterface S of K
//assert(new E().twice (1) == 2); // NoSuchMethod 'twice'
assert(new E().thrice(1) == 3); // thrice() Provided by K
}
我主要只是想填补我理解中的一些漏洞,所以非常感谢有人在这里指出我的问题中的任何误用术语或错误概念。
Dart 版本 1.13 中 mixins 的工作方式发生了变化。它在VM中实现,但还没有在dart2js中实现,我不确定分析器。
仍然,E
是一个非抽象 class,它没有实现自己的接口(实现 I
但没有非抽象 twice
成员)。这应该会导致警告、mixins 或无 mixins。
最重要的是,K
扩展了 S
,因此当使用 K
作为 mixin 时,mixin 应用程序的 superclass 也应该实现 S
D
没有。那应该给出另一个警告。