还记得在流程控制语句那里的 countup 和 countdown 么?它们都是迭代器。我们也可以定义自己的迭代器:
iterator range(lb, ub: int): int = # 以 iterator 开头var curr = lbwhile curr < ub:yield curr # 用 yield 来向外输出本次迭代值inc(curr)
有了迭代器,我们就可以使用了:
var sum = 0for i in range(1, 10):sum += iecho sum # 45
迭代器和过程有点像,不过有一些很重要的区别:
- 迭代器只能在
for循环中使用 - 迭代器不能包含
return语句(过程不能包含yield语句) - 迭代器没有隐式
result变量 - 迭代器不支持递归
- 迭代器暂时不支持前置声明(这只是暂时的,未来编译器会支持的)
