我正在尝试定义两个结构,即Node和Edge。 一个节点包含一组边,而一条边包含目标节点和到达该节点的概率。由于其余问题的结构方式,我无法避免拥有Edge对象。
struct Node
edges::Vector{Edge}
end
struct Edge
next::Node
probability::Float64
end
每当我尝试运行整个脚本时,都会收到“ UndefVarError:Edge未定义”。
如果仅尝试运行边缘部分,则会显示“ UndefVarError:Node未定义”。
是否有一种方法(像C语言一样)预先声明结构,或告诉julia一起处理这两个结构?
答案 0 :(得分:4)
如何使用抽象类型:
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,其中包含的加权图形可能满足您的需求。
答案 1 :(得分:2)
据我所知尚无法解决,请参见https://github.com/JuliaLang/julia/issues/269。
在这种情况下,可以定义介于中间的抽象类型,直到问题解决为止:
<MenuItem Header="Open Files" Name="MiInsertOpen"
d:DataContext="{d:DesignInstance Type={x:Type core:DBInterface}}"
ItemsSource="{Binding InsertableDBs}">
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="{Binding DisplayName}" />
<Setter Property="ToolTip" Value="{Binding FilePath}" />
<Setter Property="Command" Value="{Binding DataContext.CmdInsert,
RelativeSource={RelativeSource FindAncestor,
AncestorType=MenuItem, AncestorLevel=2}}" />
<Setter Property="CommandParameter" Value="{Binding FilePath}" />
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>