mel*_*oli 2 javascript recursion yield coffeescript
我试图理解如何yield使用递归.例如,我们在CoffeeScript中有以下函数来计算正整数的阶乘并返回当前的累积产品:
prod = 1
f = (n) ->
if n > 0
prod = n * prod
yield prod
f(n-1)
Run Code Online (Sandbox Code Playgroud)
因此,如果我们使用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
Run Code Online (Sandbox Code Playgroud)
但是,实际输出是
{value: 3, done: false}
{value: {}, done: false}
{value: undefined, done: true}
{value: undefined, done: true}
...
Run Code Online (Sandbox Code Playgroud)
谁能解释一下这里发生了什么?我应该如何更改代码以获得所需的结果?谢谢!
@phenomnomnominal,从CoffeeScript 1.9.1开始,"yield from"为"yield*":
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
Run Code Online (Sandbox Code Playgroud)
这应该产生:
{ value: 3, done: false }
{ value: 6, done: false }
{ value: 6, done: false }
{ value: undefined, done: true }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
910 次 |
| 最近记录: |