從python3到Julia,我們希望能夠使用yield/yield語法或類似的東西寫出快速迭代器。是否有一個宏,用於在茱莉亞從類似生成器的函數創建快速迭代器?
朱莉婭的宏似乎表明,可以建立一個宏,將這種「生成器」函數轉換爲朱利亞迭代器。 [它甚至好像你可以寫在功能的風格,這是一個特點Iterators.jl包也試圖提供其具體迭代器https://github.com/JuliaCollections/Iterators.jl#the-itr-macro-for-automatic-inlining-in-for-loops容易在線迭代器]
只給什麼,我有一個例子記:
@asiterator function myiterator(as::Array)
b = 1
for (a1, a2) in zip(as, as[2:end])
try
@produce a1[1] + a2[2] + b
catch exc
end
end
end
for i in myiterator([(1,2), (3,1), 3, 4, (1,1)])
@show i
end
其中myiterator
應該理想地創建具有低開銷儘可能快速迭代。當然這只是一個具體的例子。理想情況下,我想有一些適用於所有或幾乎所有發生器功能的東西。
目前推薦的將生成器函數轉換爲迭代器的方法是通過Julia的任務,至少據我所知。但是他們似乎也比單純的迭代器慢得多。例如,如果你可以使用簡單的迭代器(如imap
,chain
等)(由Iterators.jl
包提供)來表示你的函數,這似乎是非常可取的。
理論上可以在茱莉亞建立一個宏轉換生成器式的功能變成靈活的快速迭代器?
Extra-Point-Question:如果這是可能的,是否會有一個通用宏來嵌入這樣的迭代器?
「Channel」代替0.6中的Task,應該比「Task」快得多。 –
我還沒有聽說過他們,我讀了很多關於朱莉婭的文件。感謝指針! – schlichtanders
渠道不會取代任務---它們是任務可用於溝通的機制。 –