对于dart缺乏静态类型语义有哪些好的解决方法?

时间:2013-05-02 09:39:13

标签: dart

我来自C#/ F#/ Haskell,所以我正在努力想出解决我习惯用类型解决的编程问题的解决方案。

  1. A类,其中T:new()在C#中,这主要是因为我可以在某处做新的T()。这会在Dart中创建格式错误的类型错误。有没有合理的惯用方法来解决这个问题?也许是工厂?

  2. 我用mixins做了一些实验,在继承的mixin成员名称冲突的情况下,最后一个mixin获胜。所以对于以下内容: abstract class mixA {void foo(); } abstract class mixB {void foo(); } class C使用mixA,mixB {}扩展Object new C()。foo();

  3. 这最终会调用mixB.foo()而不是 class C使用mixB扩展Object,mixA {} 最终会调用mixA.foo() 无论如何都可以访问隐藏的mixins的成员吗?

    假设我将2个mixin与同名字段混合在一起。子类实例在运行时是否有2个字段(只有1个是不可访问的),或者对象是字典,每个名称只有1个插槽?

1 个答案:

答案 0 :(得分:4)

1是不可能的。您不能在泛型类型(或该变量)上调用new。最常见的解决方法是创建一个分配对象的闭包。

2的答案不是因为Mixins可以被视为超类:A extends Object with B, C基本上等同于:

class B' extends Object { <copy over code inside B> }
class C' extends B' { <copy over code inside C> }
class D extends C' { ... }

考虑到这一点:

  • 没有。没有办法访问隐藏的超级元素。
  • 是肯定的。你最终会有多个领域。

小注意:<copy over code inside X>部分不完全正确,因为这会改变库范围。 mixin B中的代码在库中概念性地声明了mixin。