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

day*_*ter 1 julia

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

type MyList
    a::Int64
    b::Int64
    connections::Array
    MyList(a, b) = new(a, b, [])
end
Run Code Online (Sandbox Code Playgroud)

这个link函数会把第二个变量的名字放在第一个变量的connections列表中(如果我知道怎么做的话):

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

然后我就能做到这一点:

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)
Run Code Online (Sandbox Code Playgroud)

然后我可以检查连接:

a1.connections

-> [a2, a3, a4]
Run Code Online (Sandbox Code Playgroud)

并做这样的事情:

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

-> 
33
55
77
Run Code Online (Sandbox Code Playgroud)

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

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

avy*_*ysk 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
Run Code Online (Sandbox Code Playgroud)