所以这是我的代码
abstract AbstractNode
type Edge
source::AbstractNode
target::AbstractNode
Edge(source::AbstractNode, target::AbstractNode) = new(source, target)
end
type Node <: AbstractNode
edgeList::Vector{Edge}
Node() = new([])
end
a = Node()
b = Node()
edge = Edge(a,b)
push!(a.edgeList, edge)
如果您运行此代码,则a
会存储edge
,而a
存储{{1}}。在没有引起问题的Python中,但是对于Julia,我输入一个递归循环并得到一个StackOverFlowError()(喊出来!:-))。我该如何解决这个问题?
答案 0 :(得分:4)
此问题已在Julia 0.3中修复,即我
julia> push!(a.edgeList, edge)
1-element Array{Edge,1}:
Edge(Node([Edge(#= circular reference =#)]),Node([]))
以下pull request解决了此问题&#34;错误&#34; (这只是输出意义上的错误 - 数据结构本身当然非常好)。