Julia 如何在数据类型';谁的领域?
假设我有一个设计用于存储信息的类型,包括指向其他变量的链接:Julia 如何在数据类型';谁的领域?,julia,Julia,假设我有一个设计用于存储信息的类型,包括指向其他变量的链接: type MyList a::Int64 b::Int64 connections::Array MyList(a, b) = new(a, b, []) end 此链接函数将第二个变量的名称放入第一个连接列表中(如果我知道如何操作): 然后我可以通过以下方式检查连接: a1.connections -> [a2, a3, a4] 这样做: for conn in a1.connection
type MyList
a::Int64
b::Int64
connections::Array
MyList(a, b) = new(a, b, [])
end
此链接
函数将第二个变量的名称放入第一个连接
列表中(如果我知道如何操作):
然后我可以通过以下方式检查连接:
a1.connections
-> [a2, a3, a4]
这样做:
for conn in a1.connections
println(conn.a)
end
->
33
55
77
也就是说,如果我能够首先解决如何将变量的名称存储在connections
数组中
或者我的方法不对?为什么不能将第二个列表添加到连接中?如果我正确理解你的要求,它会成功的 请注意,这样在x1.connections中就不会得到x2的副本,而只是得到一个指向x2的指针 看:
为什么不能将第二个列表添加到连接中?如果我正确理解你的要求,它会成功的 请注意,这样在x1.connections中就不会得到x2的副本,而只是得到一个指向x2的指针 看:
为什么不使用
Ref
s链接呢?只是想一想:这里的术语真的很糟糕。链接
/连接
这几个词对我有误导性;它们似乎暗示了一个双向链接,而你在这里做的是一个定向链接。此外,您使用的术语list
也会产生误导,因为您正在构建的似乎是一棵树,而不是“链表”。我会使用诸如“MyTree”、“NextNode”/“Children”之类的术语来代替。@Tassopapastylianou是的,我的最小工作示例有点过于简化了,如果不是真的脑死亡的话,但希望它能传达我试图做的事情的本质……为什么不使用Ref
s链接呢?只是想一想:这里的术语真的很糟糕。链接
/连接
这几个词对我有误导性;它们似乎暗示了一个双向链接,而你在这里做的是一个定向链接。此外,您使用的术语list
也会产生误导,因为您正在构建的似乎是一棵树,而不是“链表”。我会使用诸如“MyTree”、“NextNode”/“Children”之类的术语来代替。@Tassopapastylianou是的,我的最小工作示例有点过于简化,如果不是真的脑死亡的话,但希望它能传达出我试图做的事情的本质……谢谢。我确信它存储了所有数据(可能更大)。我必须仔细看一下…@daycaster如果这个答案满足你的问题(我相信是的),请接受它,这样这个问题就可以“关闭”了。@TasosPapastylianou OK。但我想知道Julia的元编程是否能做一些聪明的事情。但是这个答案是有效的。谢谢。我确信它存储了所有数据(可能更大)。我必须仔细看一下…@daycaster如果这个答案满足你的问题(我相信是的),请接受它,这样这个问题就可以“关闭”了。@TasosPapastylianou OK。但我想知道Julia的元编程是否能做一些聪明的事情。但这个答案是有效的。
a1.connections
-> [a2, a3, a4]
for conn in a1.connections
println(conn.a)
end
->
33
55
77
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