问题标签 [yield-keyword]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1636 浏览

javascript - 什么时候应该使用 yield 以及什么时候 yield* 和 Koa.js

浏览 koa 示例、文档和中间件,我注意到这两种形式yield都在使用,我没有注意到任何特别的区别。最极端的情况是在koa-mount中,示例代码使用了yield next;form,包本身使用yield*了多次。其他包(例如koa-views)也使用这种yield next形式。

我理解语言定义的两种形式之间的区别,但不明白在 koa 的上下文中它们是如何互换使用的,什么时候使用一种而不是另一种是正确的。

编辑 29/5

经过一番研究,我了解到,由于 koa 是建立在 co 之上的,并且 co 能够处理多种类型的异步结果(thunk,Promises ...),因此两者都可能是合法的,但我仍然不确定什么指导方针有助于决定在每种情况下使用哪种形式。

0 投票
4 回答
1197 浏览

python - 为什么yield函数在Python中不需要括号?

在 Python 中,我多次看到yield用于创建生成器的函数。this 和print函数在技术上都执行方法的操作,因为它们返回一个值。然而,在从 Python 2 到 Python 3 的变化过程中,print函数像普通的方法调用一样获得了括号,但 yield 保持不变。此外,yield保留关键字的颜色为黄色,而print保留方法的颜色为紫色。为什么yield不被视为一种方法并以这种方式着色而不使用括号语法?

(以类似的方式,为什么return还缺少括号?)

让我添加更多内容,yield 和 continue 在许多其他语言中也没有括号。我只是想知道除了保留之外是什么使它与众不同。还有许多其他保留方法可以得到括号。

0 投票
1 回答
136 浏览

python - 在 Python 3.3+ 中使用新生成器调用 gen.send()?

来自PEP342

因为生成器迭代器在生成器函数体的顶部开始执行,所以当生成器刚刚创建时,没有 yield 表达式来接收值。因此,当生成器迭代器刚刚启动时,禁止使用非 None 参数调用 send(),...

例如,

为什么这是非法的?我理解yield这里使用的方式,它暂停函数的执行,并在下次调用next()(or send()) 时返回到该位置。但似乎打印(yield i)?的第一个结果应该是合法的

换一种方式问,紧跟在 之后的生成器“g”处于什么状态g = a()。我假设它一直运行a()到第一个 yield,并且由于有一个 yield,它返回了一个生成器,而不是标准的同步对象返回。

那么,为什么在新生成器上使用非 None 参数调用 send 是非法的呢?

注意:我已经阅读了这个问题的答案,但并没有真正理解为什么在新生成器上调用 send (非 None )是非法的。

0 投票
1 回答
1800 浏览

list - Scala:从匹配条件的列表中返回一个元素

我有一个列表,我正在尝试编写一个函数returnMatchedElement(x:Int,y:Int,f:(Int,Int)=>Boolean),如果某个条件与列表的某个元素匹配,它将返回该元素。这是我到目前为止所得到的:

我猜我在理解yield关键字方面有问题。我在这里做错了什么?

编辑

下面的答案有效(谢谢),但前提是 f 返回布尔值。我尝试了另一个这样的例子

现在编译器说

0 投票
2 回答
1434 浏览

javascript - 如何在 javascript 中使用嵌套函数作为生成器(使用“内部”收益)

给出 8,错误;然后 6,假;然后未定义,真;然而

给了我三倍 undefined,true;

由于我想要 d1 的隐藏结构(作为内部函数),我怎样才能继续获得与第一个样本相同的结果?

0 投票
1 回答
488 浏览

jshint - jshint 在 co 中输出后记录缺少分号

我正在使用 JSHint 进行 linting,并且在使用 co 时遇到问题,在yield语句中的生成器中我得到 ERROR: line 18 col 28 Missing semicolon。

.jshintrc 文件如下所示:

我该如何解决?

0 投票
1 回答
195 浏览

python - 要列出的 Python 生成器

我有一个 Python 生成器lexg,它在每次迭代时生成一个列表。该代码似乎在传统的for-loop 意义上工作,即

产生:

但似乎打破了列表理解,也就是说,两者

生产

而,我希望list(lexg(2,2))生产

的代码lexg是:

是什么导致空输出?

编辑/解决方案

如下所示,问题在于生成器的每一步都返回相同的列表。因此,一种解决方案是在返回之前复制列表。例如,我已将 的yield exponent;行更改lexgyield list(exponent);,从而解决了问题。

0 投票
1 回答
638 浏览

python - 当生成器的值耗尽时会发生什么?

为了说明这个问题,假设我们有这个简单的生成器:

这将打印数字 0 到 9。但是如果我们有:

(更改在while语句中。)然后它只打印数字 0 到 4。一旦num >= 5,则生成器不再产生值。

我很好奇的是幕后发生了什么:我使用PythonTutor 单步执行代码,我的印象是一旦while语句不再是True,函数隐式返回Nonefor循环以某种方式检测到,然后也休息。我使用next内置来更仔细地检查它:

这支持了我的理论。我的大问题:它是如何StopIteration工作的,这是否意味着调用具有大值的生成器可以等效于使用其最小终止值调用它?在我们的例子中,for i in firstn(5)应该for i in firstn(9999999999999)是等价的,对吧?

0 投票
1 回答
379 浏览

python - 在 python 中创建一个生成器的新实例

我正在尝试抓取一个包含许多指向包含广告的页面的链接的页面。我目前正在做的导航是转到带有广告列表的第一页并获取各个广告的链接。之后,我检查以确保我没有通过从数据库中提取数据来抓取任何链接。下面的代码基本上获取了所有的 href 属性并将它们作为一个列表加入。之后,我将它与我存储在我已经抓取的页面数据库中的链接列表进行交叉检查。所以基本上它会返回一个我还没有抓取的链接列表。

一旦它抓取了该页面的所有链接,它就会转到下一个。我试图通过再次调用 _scrape_home_urls() 来重用它

提前致谢。

0 投票
1 回答
1185 浏览

angular - Angular 2 产生保留字

我想在我的 A2 方法中使用一些生成器,但它向我抛出了一个错误:reserved word in strict mode。(问题在产量声明中)。

如何在 ng2 中使用生成器?谢谢你的帮助!

我的代码如下所示: