Julia中两个结构体能否互相引用?实现方法及空字段咨询
问题解答
1. 实现结构体互相引用的正确方式
你给出的代码本身就是正确实现两个可变结构体互相引用的方式。Julia 允许可变结构体(mutable struct)的字段引用自身类型,只要在初始化时先给一个合法的占位值(比如nothing),之后再修改字段指向对方即可。
实际运行这段代码不会报错,因为mutable struct支持字段的后续修改,循环引用在 Julia 中是被允许的:
mutable struct Test test::Union{Test, Nothing} end t1 = Test(nothing) t2 = Test(nothing) t1.test = t2 t2.test = t1
执行后t1.test会指向t2,t2.test会指向t1,形成合法的循环引用。
2. 设置结构体初始空字段的正确性
用Union{Test, Nothing}定义字段类型并以nothing作为初始值,是设置这类空字段的正确且常用的方式。
因为 Julia 要求结构体的所有字段在创建时必须被初始化,不能留空。nothing作为 Julia 内置的“空值”占位符,刚好可以用来表示字段暂时未指向有效对象,后续再通过赋值修改为目标引用。如果更强调“缺失值”语义,也可以用Union{Test, Missing}并以missing作为初始值,但nothing在这类引用场景下更常用。
内容的提问来源于stack exchange,提问作者Alan
相关产品推荐
相关产品推荐

