生成器

badge

生成器是在块中使用 yield! 过程的特殊过程

g!() =
    yield! 1
    yield! 2
    yield! 3

yield! 是在调用self!.yield! 的子程序块中定义的过程。和return一样,它把传递给它的值作为返回值返回,但它具有保存block当前执行状态,再次调用时从头开始执行的特性 生成器既是过程又是迭代器; Python 生成器是一个创建迭代器的函数,而 Erg 直接迭代。过程本身通常不是可变对象(没有),但生成器是可变对象,因为它自己的内容可以随着每次执行而改变

# Generator!
g!: Generator!((), Int)
assert g!() == 1
assert g!() == 2
assert g!() == 3

Python 风格的生成器可以定义如下

make_g() = () =>
    yield! 1
    yield! 2
    yield! 3
make_g: () => Generator!