while-loop - Nim 中的迭代器生成函数:分配迭代器时工作,直接调用时卡住
问题描述
我试图制作一个创建迭代器的过程,如下所示:
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
但是,最初,我尝试了这种细微的变化:
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/上运行上述内容时,它似乎被卡住了。什么都没有显示。
为什么会有这种差异?
解决方案
为什么?
因为有bug。
你能为这个做什么?
向 github.com/nim-lang/Nim 报告错误
同时使用
let myClosureIter = makeCDFrom(6)
或在没有工厂的情况下定义您的迭代器:
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
推荐阅读
- r - R中另一列中的分组函数
- aws-lambda - 来自 lambda 的 aws-sdk js runJobFlow 未发送启动 EMR 集群的请求
- javascript - router-link vue 测试未触发属性
- python - 未以 Django 形式上传的文件 - 编码类型不正确
- javascript - 使用对象的键值获取新数组中的最后一个元素?
- windows - 通过 Powershell 使用驱动器号挂载 ISO
- python - Python:类中的列表如何工作?
- c# - 如何使用 AutoMapper 将域模型中的单个 Id 映射到数据模型中的多个 Id?
- ios - SwiftUI 显示标签/文本中剩余的字符数
- django - 我的 django 在运行服务器时不断循环代码