當您需要延遲地生成乙個值序列時,請考慮使用生成器函式。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...