
124
|
第
6
章
Seq
需要知道如何得到下一个元素,一旦使用了这个元素就可以将它删除,它不会记
住以前的值。如果处理完
Seq
的所有元素之后再试图使用这个
Seq
,你会得到一个错
误:
put $sequence.pick; # 3 (or maybe something else)
put $sequence; # Error
这个错误指出了你要怎么做:
This Seq has already been iterated, and its values consumed
(you might solve this by adding .cache on usages of the Seq, or
by assigning the Seq into an array)
增加
.cache
就能记住
Seq
的元素,从而能重用这些元素。现在使用了
.pick
之后不
再有错误:
my $range = 0 .. 5;
my $sequence = $range.reverse.cache;
say $sequence.^name; # Seq;
put $sequence.pick; # 5 (or maybe something else)
put $sequence; # 5 4 3 2 1 0
不过,这样做时要特别当心。
Seq
的好处之一就是它能节省内存,因为除非真正需要
否则它不复制数据。
6.3.1
无限惰性列表
Seq
必须创建所有元素从而使用
.pick
选择其中一个元素。一旦完成,它会忘记这些
元素,而且没有办法再创建更多元素。 ...