生成器

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!