[421] Re:クラスメソッドとクラス変数
投稿者:タイガー
2007/02/20 02:13:25
>えーと、iterator は、iterator 自体がオブジェクトであるような
>作りにした方が便利だと思います。iterator を利用する側が
>必ず closure を作るのは面倒くさいですし、なにより、
利用者側がclosureを作るのが面倒というのは、Ruby風の
a1.iterate() { |i|
print("" + i + " ");
}
という書き方ができないからであって、iterate()というメソッドの
中にループ処理を隠している分、Iteratorを使うよりも
記述はシンプルだと思います。
ただ逆に、慣れてないとループしているというのが分かりづらくなっています。
>複数のコレクションを、複数の iterator を使って同時に並行して
>アクセスするようなプログラム、たとえばコレクションどうしの
>大小比較:
>function compare(i, j) {
...
>}
>print(compare(ArrayIterator(a), ArrayIterator(b)) + "\n");
>みたいなことをしようとすると、eachメソッド方式では困っちゃいます。
Iteratorのご紹介ありがとうございます。ただIteratorは良い方法だと思いますが、
Array自身にeachメソッドを付ける方法とどちらが良いかはよく分かりません。
Arrayみたいな「データ構造」を表すクラス(もどき)にリスト(の要素)をイテレートするという
「処理」を表すメソッドを持たせるのは、真面目に考えればよくないのかもしれませんが、
頻繁にでてくる処理なので、Arrayに持たせるのはバランス的に自然なのかもしれません。
ただ、compare()みたいなのをどう表現するのかは、調べてみます。
(ぱ)さんへ
>ひとつのクラスのconstructorで10個のpointが作られた時、
>「クラスフィールド」はひとつしかないので、ただのインスタンス変数とは違うでしょう。
よく考えたらその通りでした。すいません。
closureの特性をうまく利用した方法だと思います。