如何在Julia中初始化/构造深层嵌套结构?

皮特·德

我想创建一些更深层的嵌套结构。看起来Setfield.jl软件包足以填充它们。但是我在(空)结构的初始化中苦苦挣扎,以在以后迭代地填充它们。这些结构看起来像:

struct Bands
   B0::String
   B1::String
   B2::String
   B3::String
   B4::String
   B5::String
   .
   .
   .
   B25::String
end 


struct Masks
   mask1::Bands
   mask2::Bands
   mask3::Bands
   mask4::Bands
   mask5::Bands
   mask6::String
end

我已经尝试过内部构造函数,如此处所述https://docs.julialang.org/en/v1/manual/constructors/#Incomplete-Initialization-1似乎我必须像在https://jw3126.github.io/Setfield.jl/stable/intro/中描述的那样设置所有值如何初始化嵌套结构,在这种情况下一次要设置131个值?

弗雷德里克雷

您可以创建默认构造函数,该构造函数仅将空对象放在所有字段中,以便稍后进行更新,例如

julia> struct Bands
           B0::String
           B1::String

           # Create a constructor that puts an empty String ("") for each field
           Bands() = new(("" for _ in 1:length(fieldnames(Bands)))...)

           # Define a vararg constructor
           Bands(args...) = new(args...)
       end

julia> struct Masks
           mask1::Bands
           mask2::Bands

           # Create a constructor that puts an empty Bands (Bands()) for each field
           Masks() = new((Bands() for _ in 1:length(fieldnames(Masks)))...)

           # Define a vararg constructor
           Masks(args...) = new(args...)
       end

julia> masks = Masks()
Masks(Bands("", ""), Bands("", ""))

julia> using Setfield

julia> masks = @set masks.mask1 = Bands("hello", "world") # Set a field of masks
Masks(Bands("hello", "world"), Bands("", ""))

julia> masks = @set masks.mask2.B0 = "hello" # Set a field of masks.mask2
Masks(Bands("hello", "world"), Bands("hello", ""))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章