Iterators
イテレータ???型宣言 Iterator ?従?オブジェクト????? (型 T ?イテレート ?れる型):
typedef Iterator<T> = { function hasNext() : Bool; function next() : T; }
イテレータを実行?る???for 構文を使?????????。も??も?純?イテレータ? ... (3??ドット) ?より作られる IntIter ??。?????次?コード? 0 ?ら 9 ???????数字を表示???:
for( i in 0...10 ) { // ... }
???普通? for ループ???:
for( i in 0...arr.length ) { foo(arr[i]); }
変数 i ?自動的?宣言?れる???for を使?????り??ら???宣言?????必???り??ん。??変数? for ループ内???利用?能??り??。
イテレータを実装?る
自分?イテレータを定義?る??も?????。?純? Iterator ?型宣言?従??クラス内? hasNext ? next メソッドを実装???れ??????。標準ライブラリ? IntIter を実装??例を次?示???:
class IntIter { var min : Int; var max : Int; public function new( min : Int, max : Int ) { this.min = min; this.max = max; } public function hasNext() { return( min < max ); } public function next() { return min++; } }
実装??イテレータ??for...in 構文?次?よ??使?????????:
var iter = new IntIter(0,10); for( i in iter ) { // ... }
for 内?変数?自動的?宣言?れ?イテレータ?型??縛?れ??。イテレート後???変数を使???????????り??。
イテレート?能?オブジェクト
?るオブジェクト?引数を?ら???イテレータを返? iterator() ???メソッドを??場?????オブジェクト?イテレート?能?見??????????。????何?特定?型を実装?る必???り??ん。???よ??オブジェクト? for 構文?中??iterator() メソッドを呼???直接指定?る????????。
var a : Array<String> = ["hello","world","I","love","Haxe","!"]; for( txt in a ) { tf.text += txt + " "; }
??例???イテレータを用???列??素を順??り出??文字列を作?????。for ?中? a.iterator() を読ん?も??????り??。
«« Advanced Types | Properties »»