javascript - 如何克隆 ES6 生成器?

标签 javascript ecmascript-6 clone generator

我正在尝试使用生成器在 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)

我已经尝试了 lodashclonecloneDeep,但它们没有用。以这种方式返回的迭代器是 native 函数并在内部保留其状态,因此似乎无法使用自己的 JS 代码来实现。

最佳答案

Iterators […] keep their state internally, so it seems there's no way

是的,这是有充分理由的。您不能克隆状态,否则您可能会对生成器进行过多篡改。

不过,通过记住它的序列并稍后再次产生它,可以创建第二个迭代器与第一个迭代器一起运行。但是,应该只有一个真正驱动生成器的迭代器 - 否则,您的哪个克隆将被允许发送 next() 参数?

关于javascript - 如何克隆 ES6 生成器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26179693/

相关文章:

javascript - ES6 Map 仅返回对象键数组

javascript - 使用 JQuery 克隆的下拉框不保留原始行为

Git 克隆错误的仓库

git - SSH/HTTP/匿名 HTTP 克隆 URL 在 Gerrit 2.12.2 中不可见

javascript - 在 Javascript 中动态创建选项元素

javascript - 如何正确导入 CDN,包含 CSS 和 jQuery CDN 的代码有什么问题?

Javascript - chatjs donut 在悬停时运行脚本

javascript - jQuery - 将 POST 发送到本地主机网络应用程序(Hue 模拟器)

javascript - 如何使用从数据库或变量查询的模板文字?

javascript - 无法达到某个值......ReactJS