Я пытаюсь понять, как yield
работает с рекурсией. Например, мы имеем следующую функцию в CoffeeScript, которая вычисляет факториал положительного целого числа и возвращает накопительный продукт: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}
...
Может кто explai Что здесь происходит? И как я должен изменить свой код, чтобы получить желаемые результаты? Благодаря!