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>); 
}

分类:

技术点:

相关文章: