W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
在 Dart 中,函數也是對象,就想字符和數字對象一樣。 使用 typedef ,或者 function-type alias 為函數起一個別名, 別名可以用來聲明字段及返回值類型。 當函數類型分配給變量時,typedef會記錄類型信息。
請考慮以下代碼,代碼中未使用 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 是函數,
// 但是函數是什么類型 ?
assert(coll.compare is Function);
}
當把 f 賦值給 compare 的時候,類型信息丟失了。 f 的類型是 (Object, Object) → int (這里 → 代表返回值類型), 但是 compare 得到的類型是 Function 。如果我們使用顯式的名字并保留類型信息, 這樣開發(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 只能使用在函數類型上, 我們希望將來這種情況有所改變。
由于 typedefs 只是別名, 他們還提供了一種方式來判斷任意函數的類型。例如:
typedef int Compare(int a, int b);
int sort(int a, int b) => a - b;
main() {
assert(sort is Compare); // True!
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯系方式:
更多建議: