如何在数据类型的字段中存储变量之间的链接?

时间:2017-02-24 18:39:52

标签: julia

假设我有一种用于存储信息的类型,包括指向其他​​变量的链接:

type MyList
    a::Int64
    b::Int64
    connections::Array
    MyList(a, b) = new(a, b, [])
end

这个link函数会将第二个变量的名称放入第一个变量的connections列表中(如果我知道该怎么做):

function link(x_1::MyList, x_2::MyList)
    push!(x_1.connections, #= name of =# x_2)     # <------------- ?
end

然后我就能做到这一点:

a1 = MyList(11, 22)
a2 = MyList(33, 44)
a3 = MyList(55, 66)
a4 = MyList(77, 88)    
link(a1, a2)
link(a1, a3)
link(a1, a4)

然后我可以检查连接:

a1.connections

-> [a2, a3, a4]

并做这样的事情:

for conn in a1.connections
    println(conn.a)
end

-> 
33
55
77

也就是说,如果我可以首先解决如何在connections数组中存储变量的名称。

或许我正在以错误的方式接近这个?

1 个答案:

答案 0 :(得分:5)

为什么不能只将第二个列表添加到连接中?如果我理解你想要的东西,它就会做到这一点。

请注意,通过这种方式,您无法在x1.connections中获取x2的副本,而是只有指向x2的指针。

查找

julia> function link(x1::MyList, x2::MyList)
           push!(x1.connections, x2)
       end

julia> a1 = MyList(11, 22)

julia> a2 = MyList(33, 44)

julia> a3 = MyList(55, 66)

julia> link(a1, a2)

julia> link(a1, a3)

julia> for conn in a1.connections
           println(conn.a)
       end
33
55

julia> a2.a=333
333

julia> a3.a=555
555

julia> for conn in a1.connections
           println(conn.a)
       end
333
555