11 Dart生成器 call 隔離器 元資料

2021-09-29 08:33:32 字數 2418 閱讀 2653

當您需要延遲地生成乙個值序列時,請考慮使用生成器函式。dart內建支援兩種生成器函式:

同步生成器:返回iterable物件

非同步生成器:返回stream物件

要實現同步生成器函式,將函式體標記為sync*,並使用yield語句傳遞值:

iterablenaturalsto(int n) sync*
要實現非同步生成器函式,將函式體標記為async*,並使用yield語句傳遞值:

streamasynchronousnaturalsto(int n) async*
如果您的生成器是遞迴的,您可以使用yield*來改進它的效能:

iterablenaturalsdownfrom(int n) sync* 

}

實現call()方法可以讓你的dart類像函式一樣被呼叫。

在下面的示例中,wannabefunction類定義了乙個call()函式,該函式接受三個字串並將它們連線起來,每個字串用空格分隔,並在結尾加乙個感嘆號。

class wannabefunction 

main()

///執行結果

hi there, gang!

有關類的更多資訊,請參見[dart中的模擬函式]。

大多數計算機,甚至在移動平台上,都有多核cpu。為了利用所有這些核心,開發人員通常使用同時執行的共享記憶體執行緒。但是,共享狀態併發容易出錯並且可能增加**的複雜度。

不同於執行緒,所有dart**都執行在隔離器內部,而不是執行緒。每個隔離都有它自己的記憶體堆,確保任何其他隔離器都不能訪問隔離狀態。

有關更多資訊,請參見[dart:isolate庫文件]。

在dart中,函式是物件,就像字串和數字是物件一樣。typedef或function-type為函式提供乙個型別別名,你可以在宣告欄位和返回型別時使用這個名稱。當函式型別被分配給變數時,typedef保留型別資訊。

以下**不使用typedef:

class sortedcollection 

}// initial, broken implementation.

int sort(object a, object b) => 0;

void main()

當給compare分配f時型別資訊會丟失。f的型別是(object, object)->int(int表示返回值型別),當然compare的型別是function。如果我們更改**以使用顯式名稱和保留型別資訊,開發人員和工具都可以使用這些資訊。

typedef compare = int function(object a, object b);

class sortedcollection

// initial, broken implementation.

int sort(object a, object b) => 0;

void main()

注意:目前,typedefs僅限於函式型別。我們期望這種情況會改變。

因為typedef僅僅是別名,所以它們提供了一種檢查任何函式型別的方法。例如:

typedef compare= int function(t a, t b);

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

void main()

使用元資料提供關於**的附加資訊。元資料注釋以字元@開頭,後跟對編譯時常量(如deprecated)的引用或對常量建構函式的呼叫。

所有dart**都可以使用兩個注釋:@deprecated和@override。有關使用@override的示例,請參見擴充套件類。這裡有乙個使用@deprecated注釋的例子:

class television 

/// turns the tv's power on.

void turnon()

}

您可以定義自己的元資料注釋。這裡有乙個定義帶有兩個引數的@todo注釋的示例:

library todo;

class todo

// 這裡有乙個使用@todo注釋的例子:

import 'todo.dart';

@todo('seth', 'make this do something')

void dosomething()

元資料可以出現在庫、類、型別定義、型別引數、建構函式、工廠、函式、字段、引數或變數宣告之前,也可以出現在匯入或匯出指令之前。您可以使用反射在執行時檢索元資料。

python高階(11)生成器

利用迭代器,我們可以在每次迭代獲取資料 通過next 方法 時按照特定的規律進行生成。但是我們在實現乙個迭代器時,關於當前迭代到的狀態需要我們自己記錄,進而才能根據當前狀態生成下乙個資料。為了達到記錄當前狀態,並配合next 函式進行迭代使用,我們可以採用更簡便的語法,即生成器 generator ...

C 11 C 11帶來的隨機數生成器

c 11帶來諸多特性,random就是其一.1.random device 標準庫提供了乙個非確定性隨機數生成裝置.在linux的實現中,是讀取 dev urandom裝置 windows的實現居然是用rand s,在這裡強烈譴責一下.random device提供 操作符,用來返回乙個min 到m...

C 11 C 11帶來的隨機數生成器

1.random device 標準庫提供了乙個非確定性隨機數生成裝置.在linux的實現中,是讀取 dev urandom裝置 windows的實現居然是用rand s,在這裡強烈譴責一下.random device提供 操作符,用來返回乙個min 到max 之間的乙個數字.如果是linux un...