Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/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';有哪些好的解决方法;为什么缺少静态类型语义?_Dart - Fatal编程技术网

dart';有哪些好的解决方法;为什么缺少静态类型语义?

dart';有哪些好的解决方法;为什么缺少静态类型语义?,dart,Dart,我来自C#/F#/Haskell,所以我试图为我习惯用类型解决的编程问题提出解决方案 类,其中T:new()在C#中,这主要是为了我可以在某个地方做新的T()。这会在Dart中创建格式错误的类型错误。有没有一个合理的惯用方法来解决这个问题?也许是工厂 我对mixin做了一些实验,在继承的mixin成员发生名称冲突的情况下,最后一个mixin获胜。因此,以下几点: 抽象类mixA{void foo();} 抽象类mixB{void foo();} 类C使用mixA,mixB{}扩展对象 新的C()

我来自C#/F#/Haskell,所以我试图为我习惯用类型解决的编程问题提出解决方案

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

  • 我对mixin做了一些实验,在继承的mixin成员发生名称冲突的情况下,最后一个mixin获胜。因此,以下几点: 抽象类mixA{void foo();} 抽象类mixB{void foo();} 类C使用mixA,mixB{}扩展对象 新的C().foo()

  • 这将最终调用mixB.foo() 类C使用mixB扩展对象,mixA{} 最终会调用mixA.foo() 是否仍然可以访问隐藏的mixin的成员


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

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

    2的答案来自这样一个事实,即mixin可以被视为超类:
    A用B扩展对象,C
    基本上等同于:

    class B' extends Object { <copy over code inside B> }
    class C' extends B' { <copy over code inside C> }
    class D extends C' { ... }
    
    class B'扩展对象{}
    类C'扩展了B'{}
    类D扩展了C'{…}
    
    考虑到这一点:

    • 不,无法访问隐藏的超级元素
    • 对。您将得到多个字段

    小提示:
    部分并不完全正确,因为这会改变库的作用域。从概念上讲,来自mixin B的代码位于声明mixin的库中。

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

    2的答案来自这样一个事实,即mixin可以被视为超类:
    A用B扩展对象,C
    基本上等同于:

    class B' extends Object { <copy over code inside B> }
    class C' extends B' { <copy over code inside C> }
    class D extends C' { ... }
    
    class B'扩展对象{}
    类C'扩展了B'{}
    类D扩展了C'{…}
    
    考虑到这一点:

    • 不,无法访问隐藏的超级元素
    • 对。您将得到多个字段
    小提示:
    部分并不完全正确,因为这会改变库的作用域。mixinb中的代码概念上位于声明mixin的库中