zoukankan      html  css  js  c++  java
  • dart中的typedef <函数别名>

     typedef定义如下:

      typedef 给某一种特定的函数类型起了一个名字,可以认为是一个类型的别名。或者这样理解:

        自己定义了一种数据类型,不过这种数据类型是函数类型,按照这种类型实例化后的对象,就会具备类型检查;
    
    

      栗子举起,先来一个没有typedef定义:

    class SortedCollection {
      Function compare;
    
      SortedCollection(int f(Object a, Object b)) {
        compare = f;
      }
    }
    
    int sort(Object a, Object b) => 0;
    
    void main() {
      SortedCollection coll = new SortedCollection(sort);
      assert(coll.compare is Function)
    }

      可以看到coll.compare已经丢失了函数的具体信息;

      再来一个通过typedef保存别的栗子:

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

      可以看到,我们通过typedef,定义了Compare类型,即使在int sort 传入后,compare仍旧保持Compare的类型;

      基本上typedef就是这样,最后说个高级一丢的玩法,泛型函数别名:

    typedef int Compare<T>(T a, T b); 
    
    int sort(int a, int b) => a - b;
    
    void main() {
      assert(sort is Compare<int>); 
    }
  • 相关阅读:
    二分、冒泡、选择、插入排序
    15行python代码,帮你理解令牌桶算法
    mybatis 的排序方式用参数传入 但是无法正常排序
    js事件篇
    ajax详解
    kafka概要设计
    HttpClient简述
    双十一问题:在洪峰数据来临的瞬间,redis出现连接超时异常
    双十一问题:kafka消费能力低下原因思考
    Timer类注意事项
  • 原文地址:https://www.cnblogs.com/webcabana/p/12024535.html
Copyright © 2011-2022 走看看