还记得在流程控制语句那里的 countupcountdown 么?它们都是迭代器。我们也可以定义自己的迭代器:

    1. iterator range(lb, ub: int): int = # 以 iterator 开头
    2. var curr = lb
    3. while curr < ub:
    4. yield curr # 用 yield 来向外输出本次迭代值
    5. inc(curr)

    有了迭代器,我们就可以使用了:

    1. var sum = 0
    2. for i in range(1, 10):
    3. sum += i
    4. echo sum # 45

    迭代器和过程有点像,不过有一些很重要的区别:

    • 迭代器只能在 for 循环中使用
    • 迭代器不能包含 return 语句(过程不能包含 yield 语句)
    • 迭代器没有隐式 result 变量
    • 迭代器不支持递归
    • 迭代器暂时不支持前置声明(这只是暂时的,未来编译器会支持的)