[426] Re:クラスメソッドとクラス変数
投稿者:(ぱ)
2007/02/20 02:13:25
私は常々Javaとかで外部イテレータを使うたび、「めんどくせー」と思ってました。
なので、Ruby式のイテレータいいじゃん、と思っていましたが、
確かにkitさんのおっしゃるようなケースで困りますね。
(Javaのように)コレクションがIteratorを返すようになっていれば、
ライブラリ関数のforeachとクロージャで、C#のforeachみたいなものは作れるから、
その方面でいくのがよさそうですね。
>方法1. ArrayとLinkedの両方に共通なメソッドで、各要素を先頭から順に
> 取り出せる関数(インターフェース)を定義する。
これはまずいのでは。たとえば「コレクション中に同じ要素がないかどうか」を
二重ループでチェックするような場合、コレクションそのものが位置を保持していると
ひとつしか持てないので困ります。
コレクションにeachメソッドを付けるやり方では、位置を押さえているのは
eachメソッドのローカル変数なので問題にならないですけど。