Цитата:
Тоже самое, что перебирать [1, 2, 3] function* () { yield 1; yield 2; yield 3; } Тоже самое, что перебирать [1, 2, 3] function* () { for(var i = 1; i < 3; i++) yield i; } Эти два примеры выше можно ведь легко переделать в бесконечный список... Тоже самое, что перебирать cycle([1, 2, 3]) function* () { while(true) { yield 1; yield 2; yield 3; } } Тоже самое, что перебирать cycle([1, 2, 3]) function* () { while(true) { for(var i = 1; i < 3; i++) yield i; } } Этот последний пример можно переделать так... Тоже самое, что перебирать cycle([1, 2, 3]) function* () { while(true) { yield* [1, 2, 3]; } } |
Цитата:
|
Цитата:
У нас есть function* () { while(true) { yield* [1, 2, 3]; } } мы можем уменьшить цикл на одну итерацию... function* () { yield* [1, 2, 3]; while(true) { yield* [1, 2, 3]; } } и ещё... function* () { yield* [1, 2, 3]; yield* [1, 2, 3]; while(true) { yield* [1, 2, 3]; } } и ещё... function* () { yield* [1, 2, 3]; yield* [1, 2, 3]; yield* [1, 2, 3]; while(true) { yield* [1, 2, 3]; } } и ещё... function* () { yield* [1, 2, 3]; yield* [1, 2, 3]; yield* [1, 2, 3]; yield* [1, 2, 3]; while(true) { yield* [1, 2, 3]; } } поскольку это бесконечный цикл, то полностью его невозможно размотать. UPD Цитата:
function* cycle(xs) { yield* xs; yield* cycle(xs); } можно попытаться раскрыть эту рекурсию... function* cycle(xs) { yield* xs; yield* xs; yield* cycle(xs); } и ещё... function* cycle(xs) { yield* xs; yield* xs; yield* xs; yield* cycle(xs); } естественно при полном раскрытии (бесконечное кол-во строчек с yield* xs;) вы никогда не достигнете последнего yield* cycle(xs); то можно переписать так... function* cycle(xs) { while(true) yield* xs; }Вы понимаете, что это одно и тоже определение, только без рекурсии? UPD 2 внутри тела функции-генератора... yield* xs;означает тоже самое, что for(const x of xs) yield x; Цитата:
while(true) for(const x of xs) yield x; |
Malleys,
ок, наверно на сейчас достаточно, приму как данность, пока для меня это магия и ниндзя стиль js, я могу это использовать, но нет понятия, почему это |
Часовой пояс GMT +3, время: 15:58. |