【发布时间】:2021-01-01 04:33:43
【问题描述】:
我尝试制作一个创建迭代器的过程,如下:
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/ 上运行上述程序时,它似乎被卡住了。什么都没有显示。
为什么会有这种差异?
【问题讨论】:
标签: while-loop iterator nim-lang