我正在尝试使用生成器在 ES6 中创建一个 List
monad。为了让它工作,我需要创建一个已经消耗了多个状态的迭代器的副本。如何在 ES6 中克隆迭代器?
function* test() {
yield 1;
yield 2;
yield 3;
}
var x = test();
console.log(x.next().value); // 1
var y = clone(x);
console.log(x.next().value); // 2
console.log(y.next().value); // 2 (sic)
我已经尝试了 lodash
的 clone
和 cloneDeep
,但它们没有用。以这种方式返回的迭代器是 native 函数并在内部保留其状态,因此似乎无法使用自己的 JS 代码来实现。
最佳答案
Iterators […] keep their state internally, so it seems there's no way
是的,这是有充分理由的。您不能克隆状态,否则您可能会对生成器进行过多篡改。
不过,通过记住它的序列并稍后再次产生它,可以创建第二个迭代器与第一个迭代器一起运行。但是,应该只有一个真正驱动生成器的迭代器 - 否则,您的哪个克隆将被允许发送 next()
参数?
关于javascript - 如何克隆 ES6 生成器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26179693/