99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

Typedefs

2020-07-06 12:02 更新

在 Dart 中,函數(shù)也是對(duì)象,就想字符和數(shù)字對(duì)象一樣。 使用 typedef ,或者 function-type alias 為函數(shù)起一個(gè)別名, 別名可以用來(lái)聲明字段及返回值類(lèi)型。 當(dāng)函數(shù)類(lèi)型分配給變量時(shí),typedef會(huì)記錄類(lèi)型信息。

請(qǐng)考慮以下代碼,代碼中未使用 typedef :

class SortedCollection {
  Function compare;

  SortedCollection(int f(Object a, Object b)) {
    compare = f;
  }
}

// Initial, broken implementation. // broken ?
int sort(Object a, Object b) => 0;

void main() {
  SortedCollection coll = SortedCollection(sort);

  // 雖然知道 compare 是函數(shù),
  // 但是函數(shù)是什么類(lèi)型 ?
  assert(coll.compare is Function);
}

當(dāng)把 f 賦值給 compare 的時(shí)候,類(lèi)型信息丟失了。 f 的類(lèi)型是 (Object, Object) → int (這里 → 代表返回值類(lèi)型), 但是 compare 得到的類(lèi)型是 Function 。如果我們使用顯式的名字并保留類(lèi)型信息, 這樣開(kāi)發(fā)者和工具都可以使用這些信息:

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;

main() {
  SortedCollection coll = SortedCollection(sort);
  assert(coll.compare is Function);
  assert(coll.compare is Compare);
}

提示: 目前,typedefs 只能使用在函數(shù)類(lèi)型上, 我們希望將來(lái)這種情況有所改變。

由于 typedefs 只是別名, 他們還提供了一種方式來(lái)判斷任意函數(shù)的類(lèi)型。例如:

typedef int Compare(int a, int b);

int sort(int a, int b) => a - b;

main() {
  assert(sort is Compare); // True!
}


以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)