宮川です。
Perl だと配列にはイテレータは登場せず、ハッシュの each() がそれに
あたります。
オブジェクトをハッシュデータ構造と透過に扱う際に、tie ハッシュのイ
ンターフェースで NEXTKEY() というメソッドを実装しますが、これがま
さに iterator なので、それを内部的に使った実装のサンプルをつくって
みました。
というか、自分で実装は何もしてないんですけど ;)
use strict;
package Book;
use fields qw(name);
sub new {
my($class, $name) = @_;
my Book $self = fields::new($class);
$self->{name} = $name;
$self;
}
package Bookshelf;
use base qw(Tie::IxHash);
sub append_book {
my($self, $book) = @_;
$self->STORE($book => 1);
}
*next = &Tie::IxHash::NEXTKEY;
package main;
my $shelf = Bookshelf->new;
$shelf->append_book(Book->new('Around the World in 80 Days'));
$shelf->append_book(Book->new('Bible'));
$shelf->append_book(Book->new('Cinderella'));
while (my Book $book = $shelf->next) {
print $book->{name}, "n";
}
通常のハッシュでは key の順番が保存されないため、CPAN モジュールの
Tie::IxHash を使っています。
On Mon, 17 Sep 2001 20:12:59 +0900
TAKAHASHI Masayoshi <maki@…> wrote:
> Rubyについて、話だけでは何なので、結城さんの『パターン入門本』の
> サンプルをRubyで書いてみました。
--
Tatsuhiko Miyagawa mod_perl Mailing List
mailto:miyagawa@… http://bulknews.net/lib/ml/