假设我有一种用于存储信息的类型,包括指向其他变量的链接:
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数组中首先存储变量名称的问题.
或许我正在以错误的方式接近这个?
为什么不能只将第二个列表添加到连接中?如果我理解你想要的东西,它就能做到.
请注意,这样您就不会在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)