Я пытаюсь настроить функцию связанной доходности .Но когда функция вызывается во второй раз, интегрированный доход из не сбрасывается .
Я думаю, что самый простой способ - показать на примере:
Пример кода
PHP
class GeneratorTest
{
public function generatorA() {
for ($i = 0; $i < 10; $i++) {
yield $i;
}
}
// Generators can yield from other generators
public function generatorB() {
yield from $this->generatorA(); // << why is this not reset?
for($i = 0; $i < 26; $i++) {
yield chr(65 + $i);
}
}
}
$gen = new GeneratorTest();
echo "Test 1 from Generator B<br>";
foreach ($gen->generatorB() as $item) {
echo $item . "<br>";
}
echo "Test 2 from Generator B<br>";
print_r(iterator_to_array($gen->generatorB()));
Ожидается?
Я ожидал, что выходные данные «Test 2» будут идентичны «Test 1».Но на самом деле кажется, что доход от генератора не сбрасывается при использовании.
Редактировать / Важно:
Как отмечено @Ganesh Wagh: вызов генератора за секунду "для каждого" работаетв совершенстве.Проблема действительно возникает только при вызове "iterator_to_array"!Это ожидаемое поведение.
Я попытался сбросить генератор A в конце генератора B следующим образом:
PHP
public function generatorB() {
yield from $this->generatorA();
for($i = 0; $i < 26; $i++) {
yield chr(65 + $i);
}
$this->generatorA()->reset();
}
Но безрезультатно.
Вопрос: Это ожидаемое поведение?Что мне нужно сделать, чтобы сбросить «внутренний» генератор?