首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成器函数中的委托收益率(产量星,产量*)

生成器函数中的委托收益率(产量星,产量*)
EN

Stack Overflow用户
提问于 2013-07-05 14:57:38
回答 3查看 6.9K关注 0票数 40

ECMAScript 6应该带来生成器函数和迭代器。生成器函数(具有function*语法)返回迭代器。迭代器有一个next方法,当重复调用时,它执行生成器函数的主体,在每个yield操作符上重复暂停和恢复执行。

发电机上的ECMAScript 6维基还引入了“委托产品”yield*运算符如下:

yield*操作符将委托给另一个生成器。这为合成生成器提供了一种方便的机制。

“委托给另一个生成器”是什么意思?如何使用yield*“方便地组合生成器”?

您可以在Nodev0.11.3中使用--harmony-generators标志来播放生成器。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-05 15:07:58

委托给另一个生成器意味着当前生成器本身停止产生值,而产生另一个生成器产生的值,直到它耗尽它为止。然后,它恢复产生自己的价值,如果有的话。

例如,如果secondGenerator()10生成数字到15,而firstGenerator()生成从15的数字,但是在生成2之后委托给secondGenerator(),那么firstGenerator()生成的值将是:

代码语言:javascript
复制
1, 2, 10, 11, 12, 13, 14, 15, 3, 4, 5

代码语言:javascript
复制
function* firstGenerator() {
    yield 1;
    yield 2;
    // Delegate to second generator
    yield* secondGenerator();
    yield 3;
    yield 4;
    yield 5;
}

function* secondGenerator() {
    yield 10;
    yield 11;
    yield 12;
    yield 13;
    yield 14;
    yield 15;
}

console.log(Array.from(firstGenerator()));

票数 52
EN

Stack Overflow用户

发布于 2017-05-24 01:16:41

委派的产量不必委托给另一个生成器--只委托,而是委托给任何迭代器,因此第一个答案有点不确定。考虑一下这个简单的例子:

代码语言:javascript
复制
function* someGenerator() {
    yield 0;
    yield [1,2,3];
    yield* [1,2,3];
}

for (v of someGenerator()) {
    console.log(v);
}

生成器本身没有另一个函数,但是yield* [1, 2, 3]将委托给Array.prototype[@@iterator]方法。

票数 4
EN

Stack Overflow用户

发布于 2016-02-05 16:22:00

代码语言:javascript
复制
function *gimme1to2_10to15_3to5() {
    var ten = gimme10to15();
    yield 1; yield 2;
    for (var i = 10; i <= 20; i++)
        yield *ten;
    yield 3; yield 4; yield 5;
    }

function *gimme10to15() {
    for (var i = 10; i <= 15; i++)
        var x = yield i;
    }

let gen = gimme1to2_10to15_3to5();

var ar = [];
for (var i = 0; i < 12; i++)
    {
    var r = gen.next();
    ar [i] = r.value + (r.done ? "!" : "..");
    }
console.log (ar.join (", "));

结果是

代码语言:javascript
复制
1.., 2.., 10.., 11.., 12.., 13.., 14.., 15.., 3.., 4.., 5.., undefined!

备注

  1. 带有产额*的函数从内部生成器请求11个值,但只接收它应该接收的10..15。多余的产量*调用没有任何影响。
  2. 内部生成器的完成值对调用方返回的done没有影响。
  3. 输出在末尾显示未定义的,因为测试循环的编写超出了所需的值数,以便显示生成器的done = true
  4. 这个输出来自ES6试验场,巴贝尔,并且在2016年2月5日,上面展示的语义应该被认为是临时的。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17491779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档