Nim中的迭代器生成函数:在分配迭代器时起作用,在直接调用迭代器时卡住 [英] Iterator-producing function in Nim: works when assigning the iterator, stuck when calling it directly

查看:81
本文介绍了Nim中的迭代器生成函数:在分配迭代器时起作用,在直接调用迭代器时卡住的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图制作一个创建迭代器的过程,如下所示:

I tried to make a procedure that creates an iterator, as follows:

proc makeCDFrom(start: int): iterator(): int =
  result = iterator(): int =
    var
      i: int = start
    while i >= 0:
      echo "i:", i
      yield(i)
      dec(i)

let cdFrom6 = makeCDFrom(6)
for j in cdFrom6():
  echo "j:", j

这似乎可以正常工作:

i:6
j:6
i:5
j:5
i:4
j:4
i:3
j:3
i:2
j:2
i:1
j:1
i:0
j:0

但是,最初,我尝试了这种细微的变化:

However, initially, I had tried with this slight variation:

proc makeCDFrom(start: int): iterator(): int =
  result = iterator(): int =
    var
      i: int = start
    while i >= 0:
      echo "i:", i
      yield(i)
      dec(i)

# Note the direct call:
for j in makeCDFrom(6)():
  echo "j:", j

当我尝试在 https://play.nim-lang.org/上运行上述代码时,似乎卡住了.什么都没有显示.

When I try to run the above on https://play.nim-lang.org/, it appears to be stuck. Nothing gets displayed.

为什么会有这种区别?

推荐答案

为什么?

因为有一个错误.

您能做什么?

将错误报告给github.com/nim-lang/Nim

Report the bug to github.com/nim-lang/Nim

与此同时使用其中一个

let myClosureIter = makeCDFrom(6)

或在没有工厂的情况下定义迭代器:

or define your iterator without the factory:

iterator makeCDFrom(start: int): int =
    var
      i: int = start
    while i >= 0:
      echo "i:", i
      yield(i)
      dec(i)

# Note the direct call:
for j in makeCDFrom(6):
  echo "j:", j

这篇关于Nim中的迭代器生成函数:在分配迭代器时起作用,在直接调用迭代器时卡住的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆