Проблема реализации взаимно вложенных структур в Юлии - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь определить две структуры, Node и Edge.Узел содержит массив ребер, в то время как ребро содержит узел назначения и вероятность достижения этого узла.Из-за того, как остальная часть проблемы структурирована, я не могу избежать наличия объекта Edge.

struct Node
edges::Vector{Edge}
end

struct Edge
    next::Node
    probability::Float64
end

Всякий раз, когда я пытаюсь запустить весь сценарий, я получаю «UndefVarError: Edge не определен».

Если я пытаюсь запустить только часть края, я получаю «UndefVarError: Узел не определен».

Есть ли способ (как в C) предварительно объявить структуры или сказать Джулииобрабатывать две структуры вместе?

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Насколько я знаю, это пока невозможно, см. https://github.com/JuliaLang/julia/issues/269.

Вы можете определить промежуточный абстрактный тип в таких случаях, пока проблема не будет решена:

abstract type AbstractEdge end

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

struct Edge <: AbstractEdge
    next::Node{Edge}
    probability::Float64
end
0 голосов
/ 12 февраля 2019

А как насчет использования абстрактных типов:

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[])

Если вы выполняете какие-либо вычисления на графике, рассмотрите возможность использования LightGraphs.jl, так как он имеет взвешенные графики, которые могут удовлетворить ваши потребности.

...