首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >JavaScript:在嵌套生成器中使用产量设置值

JavaScript:在嵌套生成器中使用产量设置值
EN

Stack Overflow用户
提问于 2017-12-19 15:43:22
回答 2查看 457关注 0票数 1
代码语言:javascript
运行
AI代码解释
复制
function* test(action) {
    const subgenerator = function*() {
        const subgeneratorVariable = yield '1';
        console.log('subgeneratorVariable', subgeneratorVariable);
    };

    for (const generatedValue of subgenerator()) {
        const result = yield generatedValue;
        console.log('result', result);
    }
}
const gen = test();

console.log(gen.next());
console.log(gen.next('a'));

这将返回:

代码语言:javascript
运行
AI代码解释
复制
{value: "1", done: false}
result a
subgeneratorVariable undefined
{value: undefined, done: true}

因此,我无法在嵌套生成器中获得结果。不过!

在这种情况下:

代码语言:javascript
运行
AI代码解释
复制
function* test(action) {
    const subgenerator = function*() {
        const subgeneratorVariable = yield '1';
        console.log('subgeneratorVariable', subgeneratorVariable);
        const subgeneratorVariable2 = yield '2';
        console.log('subgeneratorVariable2', subgeneratorVariable2);
    };

    const result = yield* subgenerator();
    console.log('result', result);
}
const gen = test();

console.log(gen.next());
console.log(gen.next('1'));
console.log(gen.next('2'));

结果是:

代码语言:javascript
运行
AI代码解释
复制
{value: "1", done: false}
subgeneratorVariable a
{value: "2", done: false}
subgeneratorVariable2 b
result undefined
{value: undefined, done: true}

所以情况发生了逆转。现在,我只能在嵌套生成器中访问已产生的值。

这两个生成器之间有没有传递值/结果的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-19 18:17:50

yield将作为参数返回要传递给next的内容,而不是右侧的表达式;for...of内部调用没有参数的next,因此获得undefined

也许这个例子可以帮助您理解使用do...while而不是for...of

代码语言:javascript
运行
AI代码解释
复制
function* test(action) {
    const subgenerator = function*() {
        let subgeneratorVariable;

        subgeneratorVariable = yield '1';  
        console.log("subgeneratorVariable: " + subgeneratorVariable);

        subgeneratorVariable = yield '2';  
        console.log("subgeneratorVariable: " + subgeneratorVariable);
    };

    const sub = subgenerator();
    let value;        

    do {
      value = yield sub.next(value).value;
      console.log("value: " + value);
    } while(value);
}

const gen = test();
let value;

value = gen.next().value;
value = gen.next(value).value;
value = gen.next(value).value;

结果是:

代码语言:javascript
运行
AI代码解释
复制
value: 1
subgeneratorVariable: 1
value: 2
subgeneratorVariable: 2

如您所见,如果要在生成器之间保留值,则必须将结果值传递给生成器next函数。

票数 2
EN

Stack Overflow用户

发布于 2017-12-19 17:59:42

在用javascript中的新yield进行升级和阅读您的示例之后,我想我知道了您想做什么和做错了什么。

你的第一次尝试是正确的,。但是你把你的console.log放错了,这让你误以为它是错的。

我重写了它,这样您就可以更好地了解当yield-ing时发生的事情。

代码语言:javascript
运行
AI代码解释
复制
function* generator() {
    function* subgenerator() {
        yield '1';
        yield '2';
    };

    for (let generatedValue of subgenerator()) {
        // Use generatedValue here ...
        console.log("Inside generator:",generatedValue);
        // .. and finally yield it to your main program
        yield generatedValue;
    }
}
let gen = generator();

console.log("Outside generator:",gen.next());
console.log("Outside generator:",gen.next());
console.log("Outside generator:",gen.next());

在第二个示例中,将生成委托给子生成器。这样做,就无法获得生成器本身的值。因为这个值是yield,-ed,并且您的生成器将在子生成器生成完成后恢复。这解释了为什么,您的生成器只看到undefined

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47896833

复制
相关文章
Facebook开发者 4 种首选语言!
“重要的是,我们采用的每种语言都最适合特定的用例;因此每当我们评估一种语言时,我们都会尽职尽责。语言决策一旦做出就会被坚持下去,因此我们希望从一开始就深思熟虑,为我们的工程师提供最好的工具。”
逆锋起笔
2022/11/30
3970
Facebook开发者 4 种首选语言!
为什么Python是数据科学家的首选语言
在21世纪的数据时代,数据科学家是最令人艳羡的职业之一。他们使用各种工具和技术挖掘大量数据,从而帮助组织做出数据驱动的决策。在这些工具和技术中,Python语言以其易于学习、强大的功能和广泛的应用,已经成为了数据科学家的首选。
TechLead
2023/10/21
3260
为什么Python是数据科学家的首选语言
Python已成为网络攻击的首选编程语言
调查数据表明,目前的GitHub代码库中,有超过20%的网络攻击工具或PoC代码都是采用Python编写的。
FB客服
2018/12/05
7050
Python已成为网络攻击的首选编程语言
Python为什么成为人工智能的首选语言
之前一直都是在学习Python与机器学习,深度学习。但是究竟为什么在众多的编程语言中选择Python作为人工智能的首选语言呢我一直不得而知,今天就来以我的理解来梳理下吧。首先在我不再赘述Python的前世今生,只是深入的说一下Python与人工智能的关系。
王荣胜
2020/03/13
1.8K0
什么是Java语言(学习一门语言首选了解这们语言)
一、什么是Java 通俗将就是计算机语言的最新版本,计算机经历了C语言、C++语言、以及C+±-语言。这里的C++ – -语言就是Java语言。Java语言是C语言的第三个计算机语言革命,C++语言是对C语言不足处的改进,的一门语言。而Java语言是面对C++语言的不做又一步的改进。为最大的革进新颖,决定不叫C+±-而后一些过程,最终叫Java。 Java与C语言以及C++语言相比的优势其又跨平台性、可移植性。
全栈程序员站长
2022/09/08
3010
编程为什么入门首选C语言呢
为什么入门首选C语言呢 C语言除了能让我们了编程的大门,也让我们了解到程序的运行原理,和计算机底层是如何交互的,这些底层的知识决定了你的高度,也决定了你的未来的职业生涯。 如果你想成为出类拔萃的人,只要你用心去学号C语言,你会发现当你再去学习别的语言的时候有,短时间内就能搞定一门语言。这是毋庸置疑的!说C语言是现代编程语言的开山鼻祖一点也不夸张。 大学期间,只要C语言是大部分专业的基础课,当时大一的自己还不知道这门课的重要性,没有好好学。现在有时间来恶补一下C语言,也算对自己的一种鞭策和提升吧。 世界编
企鹅号小编
2018/02/28
1.2K0
编程为什么入门首选C语言呢
Java失宠,谷歌宣布Kotlin现在是Android开发的首选语言
谷歌昨天宣布,Kotlin 编程语言现在是 Android 应用程序开发人员的首选语言。
新智元
2019/05/15
1.3K0
Java失宠,谷歌宣布Kotlin现在是Android开发的首选语言
如何看待 Google 将 Kotlin 作为 Android 开发首选语言?
相比两年前第一次大范围的出现在公众面前,Kotlin 这一次其实有点儿顺其自然了,成为首选是情理之中的事儿,没什么大惊小怪的。
bennyhuo
2020/02/20
8680
Python超过R,成为数据科学和机器学习的首选语言!
| 全文1765共字,建议阅读时长3分钟 | 近期,数据挖掘资讯网站KDnuggets开展了一项调查,问题是“2016年和2017年,在数据分析、数据科学和机器学习工作中,你使用R、Python、两者都用,还是其他工具?” # 高能预警:下文含多张辣眼睛的配图,请做好防护…… 对954名受访者的调查显示,Python尚未完全“吞噬”R,但2017年Python生态系统已经超越了R,成为数据分析、数据科学和机器学习领域领先的平台,同时也在迅速吸引其他平台的用户。 2016年,Python排名第二(
AI科技大本营
2018/04/26
8760
Python超过R,成为数据科学和机器学习的首选语言!
Java与Kotlin, 哪个是开发安卓应用的首选语言?
Java是很多开发者创建安卓应用的首选语言。但它在 Android 界的领导地位正受到各种新语言的挑战,Kotlin就是其一。虽然Kotlin最近才开始受到热捧,但有为数不少的人相信 Kotlin 在不久的将来,会成为Java最大的竞争者,甚至会把 Java 拉下移动开发的王座。下文中,我们对 Java 和 Kotlin 进行详细对比,以帮助您确定哪一种语言最适合于您今后的移动开发项目 。
LiveEdu
2018/05/31
4.4K0
Java与Kotlin, 哪个是开发安卓应用的首选语言?
为什么Python是入行人工智能的首选语言?
在所有编程语言里,Python并不算萌新,从1991年发布第一个版本,至今已经快30年了。
顶级程序员
2018/07/23
1.5K0
iOS CoreAudio AudioStreamBasicDescription 音频格式概念简介
AudioStreamBasicDescription 简称 ASBD,ASBD 是 CoreAudio 用来指定线性PCM格式,或者使用 CBR 编码的等大小声道的格式。如果使用的是 VBR,或者使用非等大小的 CBR,需要对每个packet独立设置 AudioStreamPacketDescription进行描述。
JoeyBlue
2021/09/07
1.6K0
盘点儿童智力开发的首选编程语言——Scratch
Scratch作为少儿编程的首选编程语言,这几年发展的如火如荼,当然,这主要还是因为它简单易学,不用掌握太多概念即可编程,这意味着你不用认识英文单词,编程照样行云流水,是不是很激动?那么现在让我们一起进入Scratch的世界吧。
Python进阶者
2021/08/18
1.3K0
Java失宠,谷歌宣布Kotlin现在是Android开发的首选语言
谷歌今天宣布,Kotlin 编程语言现在是 Android 应用程序开发人员的首选语言。
Android技术干货分享
2019/05/15
1K0
Java失宠,谷歌宣布Kotlin现在是Android开发的首选语言
盘点儿童智力开发的首选编程语言——Scratch
Scratch作为少儿编程的首选编程语言,这几年发展的如火如荼,当然,这主要还是因为它简单易学,不用掌握太多概念即可编程,这意味着你不用认识英文单词,编程照样行云流水,是不是很激动?那么现在让我们一起进入Scratch的世界吧。
前端皮皮
2021/08/20
1.1K0
盘点儿童智力开发的首选编程语言——Scratch
吃惊:Kotlin 有望超越 Java 成为 Android 首选编程语言
你们现在在使用 Kotlin 进行 Android 开发么?这份报告的结果让我很是吃惊,根据 Realm 最新的报告显示,认为 Kotlin 在 Android 开发领域所占份额很有可能将在 2018
非著名程序员
2018/02/02
7180
吃惊:Kotlin 有望超越 Java 成为 Android 首选编程语言
下个10年,Go能取代Python成为开发者的首选语言吗?
选自towardsdatascience 作者:Dasaradh S K 机器之心编译
统计学家
2020/11/06
5000
下个10年,Go能取代Python成为开发者的首选语言吗?
下个10年,Go能取代Python成为开发者的首选语言吗?
选自towardsdatascience 作者:Dasaradh S K 机器之心编译 机器之心编辑部 Go为什么是2020年最受欢迎的语言?这篇文章也许能够给你答案。 30年前,Python首次出现,但它花了20年的时间才获得开发者们的赏识。直到2019年,Python才成为最受开发者喜爱的第二大语言。Python在过去,尤其是在过去5年中的增长是非常巨大的。如今它已成为机器学习和数据科学开发者的首选语言。 在接下来的几年中,Python无疑还将继续在这些领域占据主导地位。但是,与一些新兴语言相比
机器之心
2023/03/29
6040
下个10年,Go能取代Python成为开发者的首选语言吗?
点击加载更多

相似问题

如何从CoreAudio获取首选通道布局

00

CoreAudio - kAudioFileUnsupportedDataFormatError

30

确定用户的首选语言

10

Powershell设置MSolUser的首选语言

12

首选终端脚本语言

124
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档