gpt4 book ai didi

javascript - CoffeeScript:使用 yield 和递归

转载 作者:行者123 更新时间:2023-12-01 15:52:19 27 4
gpt4 key购买 nike

我试图了解 yield 如何与递归一起工作。例如,我们在 CoffeeScript 中有以下函数,它计算正整数的阶乘并返回当前的累积乘积:

prod = 1
f = (n) ->
if n > 0
prod = n * prod
yield prod
f(n-1)

所以如果我们用 a = f(3) 调用这个函数并单步执行 a.next(),我希望看到类似

{value: 3, done: false} // prod = 3 * 1
{value: 6, done: false} // prod = 3 * 2
{value: 6, done: true} // prod = 3 * 2 * 1

但是,实际输出是

{value: 3, done: false}
{value: {}, done: false}
{value: undefined, done: true}
{value: undefined, done: true}
...

谁能解释这里发生了什么?以及我应该如何更改我的代码以获得所需的结果?谢谢!

最佳答案

@phenomnomnominal,从 CoffeeScript 1.9.1 开始,“yield*”有“yield from”:

prod = 1
f = (n) ->
if n > 0
prod = n * prod
yield prod
yield from f(n-1)

gen = f(3)

loop
ngen = gen.next()
console.log ngen
break if ngen.done

这应该产生:

{ value: 3, done: false }
{ value: 6, done: false }
{ value: 6, done: false }
{ value: undefined, done: true }

关于javascript - CoffeeScript:使用 yield 和递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28734801/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com