我尝试创建一个创建迭代器的过程,如下所示:
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/ https://play.nim-lang.org/,它似乎被卡住了。什么都没有显示。
为什么会有这样的差异?
Why?
因为有一个错误。
你能为这个做什么?
向 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)