簡體   English   中英

如何在 Julia 中實現迭代器?

[英]How to implement an iterator in Julia?

我正在嘗試在 Julia 中實現一個迭代器,但是當 for 循環已經嘗試調用start時出現異常。

這是我得到的(我運行 include(...),然后using RDF ):

julia> methods(start)
# 1 method for generic function "start":
start(graph::Graph) at /Users/jbaran/src/RDF.jl/src/RDF.jl:214

julia> for x in g
       println(x)
       end
ERROR: `start` has no method matching start(::Graph)
 in anonymous at no file

目前RDF模塊中的函數定義如下所示:

function start(graph::Graph)
    return GraphIterator(collect(keys(graph.statements)), nothing, nothing, nothing, [], [])
end

知道我做錯了什么嗎?

不要忘記指定Base. - 您正在向現有函數添加方法。

module MyMod
  type Blah
    data
  end
  export Blah
  Base.start(b::Blah) = 1
  Base.done(b::Blah,state) = length(b.data) == state-1
  Base.next(b::Blah,state) = b.data[state], state+1
end
using MyMod
x = Blah([1,2,3])
for i in x
  println(i)
end

這適用於 Julia 0.3。

在 Julia 1+ 中,這應該通過實現Base.iterate(::YourType)來獲取起始迭代和Base.iterate(::YourType, state)來實現基於某些state其他迭代。 這些方法在完成后不應返回nothing ,否則返回(result, state)元組。

x::YourType迭代

for i in x
    # stuff
end

那么是 write 的簡寫

it = iterate(x)
while it !== nothing
    i, state = it
    # stuff
    it = iterate(x, state)
end

有關詳細信息,請參閱手冊

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM