K.Maebashi's BBS 投稿フォーム
ハンドル名
件名
Link
>> >あと、制御構造の抽象化としてiteratorのようなものを表現する場合、 >> >Ruby(のeachメソッド)みたいにクロージャをメソッドに渡す形でサンプルを >> >書いてみたのですが、 >> >もっとうまいやり方がありますか? > >> これでよいのではないでしょうか。 > >えーと、iterator は、iterator 自体がオブジェクトであるような >作りにした方が便利だと思います。iterator を利用する側が >必ず closure を作るのは面倒くさいですし、なにより、 >複数のコレクションを、複数の iterator を使って同時に並行して >アクセスするようなプログラム、たとえばコレクションどうしの >大小比較: >function compare(i, j) { > for (; !i.isDone() && !j.isDone(); i.next(), j.next()) { > if (i.currentItem() < j.currentItem()) > return -1; > if (i.currentItem() > j.currentItem()) > return 1; > } > if (i.isDone() && j.isdone()) > return 0; > if (i.isDone()) > return -1; > else > return 1; >} >print(compare(ArrayIterator(a), ArrayIterator(b)) + "\n"); >みたいなことをしようとすると、eachメソッド方式では困っちゃいます。 > >なので、たぶん次のような設計の方がいいと思います。 >function ArrayIterator(anArray) { > this = new_object(); > this.theArray = anArray; > this.index = 0; > this.first = closure() { this.index = 0; } > this.next = closure() { this.index++; } > this.isDone = closure() { return this.index >= this.theArray.size(); } > this.currentItem() = closure() { return this.theArray[this.index]; } > return this; >} > >と、ここまで書いて、実際に動作するプログラムかどうか試そうとしたら、 >文法エラーになっちゃいました。UNIX版をコンパイルしてみたんですが、 >次のような1行だけのプログラムで >a = {1,2}; > 1:文法エラー({付近) >となります。 >また、次のような2行だけのプログラムでも >a = new_object(); >a.hoge = 1; > 2:不正な文字(.) >となります。 >crowbarの実装の中身は全然見てないんですが、UNIX版だけの問題なんでしょうか?
spamよけのため、ここに「ほげぴよ」と入力してください。
削除パスワード :
クリック!