朱莉娅,类型存储自己

时间:2014-08-09 07:52:28

标签: julia

所以这是我的代码

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()(喊出来!:-))。我该如何解决这个问题?

1 个答案:

答案 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; (这只是输出意义上的错误 - 数据结构本身当然非常好)。