美文网首页
类型定义 (Typedefs)

类型定义 (Typedefs)

作者: 黑色的雨天 | 来源:发表于2018-10-28 19:29 被阅读0次

    在Dart中,函数是对象,就像字符串和数字是对象一样。typedef或函数类型别名为函数类型提供一个名称,您可以在声明字段和返回类型时使用该名称。当将函数类型赋给变量时,typedef保留类型信息。

    考虑以下代码,它不使用typedef:

    class SortedCollection {
      Function compare;
    
      SortedCollection(int f(Object a, Object b)) {
        compare = f;
      }
    }
    
    // Initial, broken implementation.
    int sort(Object a, Object b) => 0;
    
    void main() {
      SortedCollection coll = SortedCollection(sort);
    
      // All we know is that compare is a function,
      // but what type of function?
      assert(coll.compare is Function);
    }
    

    当分配fcompare时类型信息丢失。f的类型是(Object, Object) → int(其中→表示返回),但compare的类型是Function。如果我们将代码更改为使用显式名称并保留类型信息,则开发人员和工具都可以使用该信息。

    typedef Compare = int Function(Object a, Object b);
    
    class SortedCollection {
      Compare compare;
    
      SortedCollection(this.compare);
    }
    
    // Initial, broken implementation.
    int sort(Object a, Object b) => 0;
    
    void main() {
      SortedCollection coll = SortedCollection(sort);
      assert(coll.compare is Function);
      assert(coll.compare is Compare);
    }
    

    注意:目前typedef仅限于函数类型。我们希望这种情况能够改变。

    因为typedef只是别名,所以它们提供了一种检查任何函数类型的方法。例如:

    typedef Compare<T> = int Function(T a, T b);
    
    int sort(int a, int b) => a - b;
    
    void main() {
      assert(sort is Compare<int>); // True!
    }
    

    相关文章

      网友评论

          本文标题:类型定义 (Typedefs)

          本文链接:https://www.haomeiwen.com/subject/kfsmtqtx.html