在关于 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
两次。问题是:这能否以某种方式通过一次 yield 解决?
最佳答案
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);
关于javascript - 有没有办法减少与其调用者通信的无限生成器中的产量数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53210145/