Perl6 における イテレータの挙動のメモ
Perl6 のイテレータは、role Iterable を実装しているクラスから取得することができる。
Iterable には iterator
メソッドが実装されていて、これを取り出せばよい。
my $iter = $obj.iterator();
この $iter は role Iterator でアレしてます。role Iterator には pull-one というメソッドがあります。pull-one はイテレータが最後に到達すると IterationEnd というシングルトンバリューを返すので、以下のように実装すれば生の iterator を直接さわって順番に舐めることができます。
use v6;
use nqp;
my $obj = [1,2,3];
my $iter = $obj.iterator;
while True {
my $next = $iter.pull-one();
if nqp::decont($next) =:= IterationEnd {
last;
}
say $next;
}
say "done";
ただし、このようなローレベルな操作は普通必要ありません。