ジェネレータを実装する
Julia advent calendar 2016 13日めの記事です。 簡単なジェネレータを書いてみました。初心者なので、間違い・もっと良い書き方があれば教えてください。※頂いたコメントを元に修正しました。
ジェネレータ
リストのように最初からすべての要素を用意するのではなく、必要な時に生成していくもの。
listの中身を+2
した文字列を生成するジェネレータ
function main()
list = [1,2,3,4,5]
generator = (syori(i) for i in list)
for i in generator
println(i)
end
end
function syori(i)
v = string(i + 2)
return v
end
main()
syori()
listの各要素にかけたい処理。複雑な処理でも関数を作ってGenerator式に渡せば綺麗に書ける。
generator = (syori(i) for i in list)
Generator式でジェネレータを作成。for文などで要素を取り出せる。
listの中身を+2
した文字列を生成するジェネレータ Task
以下の実装はPythonのyieldを使用したジェネレータと似た動きをする。(再利用できない)
基本的には上記のGenerator式を使ったほうが便利そう。
function main()
list = [1,2,3,4,5]
for i in @task generator(list)
println(i)
end
end
function generator(list)
for i in list
v = "$(i + 2)"
produce(v)
end
end
main()
produce()
ループを一時停止して生成されたvの中身を返し、ループを再開する。
@task
これを付けてfor文などで回すと要素を取り出せる。