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>); 
    }
  • 相关阅读:
    Python常用转换函数
    Python随机数
    sublime text的pylinter插件设置pylint_rc后提示错误
    使用Pydoc生成文档
    字符编码笔记:ASCII,Unicode和UTF-8
    Windows编程MessageBox函数
    魔方阵算法及C语言实现
    iOS通讯录整合,兼容iOS789写法,附demo
    谈谈iOS app的线上性能监测
    ReactiveCocoa代码实践之-更多思考
  • 原文地址:https://www.cnblogs.com/webcabana/p/12024535.html
Copyright © 2011-2022 走看看