Iterators

You are viewing an old version of this entry, click here to see latest version.

イテレータ???型宣言 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 »»

version #1542, modified 2008-05-25 18:45:40 by moriyoshi