在 Julia 中实现相互嵌套结构的问题

Ric*_*iky 3 struct types nested julia

我正在尝试定义两个结构,Node 和 Edge。一个节点包含一个边数组,而一个边包含目标节点和到达该节点的概率。由于问题的其余部分是如何构建的,我无法避免使用 Edge 对象。

struct Node
edges::Vector{Edge}
end

struct Edge
    next::Node
    probability::Float64
end
Run Code Online (Sandbox Code Playgroud)

每当我尝试运行整个脚本时,我都会收到“UndefVarError:Edge 未定义”。

如果我尝试只运行边缘部分,我会得到“UndefVarError:Node is not defined”。

有没有办法(如在 C 中)预先声明这些结构,或者告诉 julia 一起处理这两个结构?

Prz*_*fel 5

使用抽象类型怎么样:

abstract type AbstractEdge end;

struct Node{T <: AbstractEdge}
    edges::Vector{T}
end

struct Edge <: AbstractEdge
    next::Node{Edge}
    probability::Float64
end

Node() = Node{Edge}(Edge[])
Run Code Online (Sandbox Code Playgroud)

如果您进行任何图形计算,请考虑使用 LightGraphs.jl,它具有可能适合您需求的加权图形。