Dart - 類型定義

在 Dart 語言中,函數(shù)與 String 和 Number 一樣都是對象,可以使用 類型定義(或者叫 方法類型別名)來為函數(shù)的類型命名。使用函數(shù)命名將該函數(shù)類型的函數(shù)賦值給一個變量時,類型定義將會保留相關(guān)的類型信息。

比如下面的代碼沒有使用類型定義:

class SortedCollection {
  Function compare;

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

// 簡單的不完整實現(xiàn)。
int sort(Object a, Object b) => 0;

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

  // 我們知道 compare 是一個函數(shù)類型的變量,但是具體是什么樣的函數(shù)卻不得而知。
  assert(coll.compare is Function);
}

上述代碼中,當(dāng)將參數(shù) f 賦值給 compare 時,函數(shù)的類型信息丟失了,這里 f 這個函數(shù)的類型為 (Object, Object) → int(→ 代表返回),當(dāng)然該類型也是一個 Function 的子類,但是將 f 賦值給 compare 后,f 的類型 (Object, Object) → int 就會丟失。我們可以使用 typedef 顯式地保留類型信息:

typedef Compare = int Function(Object a, Object b);

class SortedCollection {
  Compare compare;

  SortedCollection(this.compare);
}

// 簡單的不完整實現(xiàn)。
int sort(Object a, Object b) => 0;

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

備忘??:目前類型定義只能用在函數(shù)類型上,但是將來可能會有變化。

因為類型定義只是別名,因此我們可以使用它判斷任意函數(shù)類型的方法:

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!
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 時間:2018年5月9日到13日 第一天: 入住億成陽光酒店,費用300元一個標(biāo)準(zhǔn)間包早餐,可兩人一起,也可以自己...
    千澄迎春閱讀 738評論 0 0
  • 在遙遠(yuǎn)的十五年前,我有一個朋友叫小武。他大約二十來歲,比我將將大一輪。按照爸媽說的,我應(yīng)該喊他武哥,但我卻一直沒大...
    陳鄉(xiāng)閱讀 1,751評論 0 6
  • 發(fā)現(xiàn)在有孩子的情況下堅持寫東西是很挑戰(zhàn)的,昨天小朋友放假了,所以我就完全忘記這個日更什么的,一整天圍著她轉(zhuǎn)...
    要佛不要火閱讀 303評論 0 1

友情鏈接更多精彩內(nèi)容