【发布时间】:2014-04-10 19:39:58
【问题描述】:
我想在 Perl 中克隆一个生成器 (Coro::Generator) 状态。例如:在下面的代码中,我有一个迭代数组的生成器:
use Coro::Generator;
sub iterate_array {
my @arr = @{ $_[0] };
generator {
foreach my $value (@arr) {
# Each time function is called it returns the next value in the array
yield $value;
}
yield undef;
};
}
my @a = (1,2,3,4);
my $iterator = iterate_array(\@a);
print $iterator->(); # output: 1
所以输出是 1。如果再次调用它将是 2(数组中的第 2 项)。
我现在想克隆迭代器的状态。比如:
my $clone = clone($iterator); # Clone iterator
print $iterator->(); # output: 2
print $clone->(); # output: 2
$clone 和 $iterator 产生相同的结果,因为它们是彼此的克隆。
我尝试过使用 Storable 包,即:
use Storable 'dclone';
my $clone = dclone($iterator);
但这会报错:
Can't store CODE items at ...
非常感谢任何帮助。
【问题讨论】:
标签: perl iterator clone generator