Ответ 1
Есть три случая, о которых я могу думать:
-
Генератор не имеет побочных эффектов, и вы просто хотите, чтобы вы могли пройти через результаты, которые вы уже захватили. Вместо генератора вы можете считать кешированный генератор. Вы можете совместно использовать генератор кэша, и если какой-либо клиент подходит к тому элементу, который еще не был, он будет продвигаться вперед. Это похоже на метод tee(), но функция tee в самом генераторе/кеше, вместо того, чтобы требовать от клиента этого.
-
Генератор имеет побочные эффекты, но не историю, и вы хотите, чтобы иметь возможность перезапуска в любом месте. Подумайте о том, как написать сопрограмму, где вы можете передать значение в любое время.
-
Генератор имеет побочные эффекты и историю, что означает, что состояние генератора в G (x) зависит от результатов G (x-1), и поэтому вы не можете просто передать x обратно в него начать где угодно. В этом случае, я думаю, вам нужно быть более конкретным о том, что вы пытаетесь сделать, поскольку результат зависит не только от генератора, но и от состояния других данных. Вероятно, в этом случае есть лучший способ сделать это.