Есть ли способ уменьшить количество выходов в бесконечном генераторе, общающемся с его вызывающей стороной? - PullRequest
0 голосов
/ 08 ноября 2018

При обсуждении генераторов Javascript кто-то приготовил интересную функцию:

function *foo() {
    var y = 1;
    while(true) yield (y = (y * (yield)));
}

Теперь эту функцию можно использовать через:

var results = [];
var bar = foo();
bar.next();
results.push(bar.next(2));
bar.next();
results.push(bar.next(2));
bar.next();
results.push(bar.next(2));
bar.next();
results.push(bar.next(2));

Как мы видим, чтобы получить следующий продукт, нам нужно дважды позвонить next. Вопрос в том, можно ли это как-то решить одним выходом?

1 Ответ

0 голосов
/ 08 ноября 2018
  while(true) y *=  yield y;

Просто выведите y, а затем умножьте y на результат.

function *foo() {
    let y = 1;
    while(true) y *=  yield y;
}

const bar = foo();
bar.next();
console.log(bar.next(2).value);
console.log(bar.next(2).value);
console.log(bar.next(2).value);
...