类型定义 (Typedefs)

在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!
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,659评论 0 13
  • 2018.9.21 星期五 珠海晴 下午看着车流量,才知道中秋小长假又到了。因为我们姐妹几个都在珠...
    wu溧蕙阅读 264评论 0 0
  • 攻,《说文》:“擊(击)也。从攴工聲(声)。” 攴,在《说文解字:击》中提到过,本义是:小击。至于工,段注引用了...
    麦叔和小麦阅读 2,473评论 4 19
  • 在医院她们或许并不为大众所熟悉,但是她们却肩负起延续生命的重担!有这样一个地方,为尿毒症患者服务的地方,他们来的时...
    娜灵蛇之珠阅读 1,802评论 0 1
  • 第042章 不就是发烧么 part 2 监狱,医院部。 一个身材姣好,打扮精致,烫着卷发的女人,随着狱警的带领,激...
    与花如笺_9a73阅读 351评论 0 0

友情链接更多精彩内容