我有一个mutable struct
,其可选字段如下:
mutable struct MyStruct
field1::Union{Int, Nothing}
field2::Union{String, Nothing}
field3::Union{Int, Nothing}
field4::Union{String, Nothing}
# ...
end
我现在可以编写一个默认构造函数,该构造函数使用nothing
初始化字段:
MyStruct() = MyStruct(nothing, nothing, nothing, nothing)
当我的结构中有很多字段时,这不是很好。另外,在这种情况下,我必须对字段进行计数以获取正确的所有“无”的构造函数调用。有更好的方法吗?
根据字段内容,我想稍后调用不同的函数:
if mystruct.field1 == nothing
do_this()
else
do_that()
end
答案 0 :(得分:3)
您可以使用fieldcount
函数来实现。此函数为您提供给定类型的实例将具有的字段数。这是一个包含mutable struct
和一个外部构造函数的示例。
julia> mutable struct Foo
x
y
z
end
julia> Foo() = Foo(ntuple(x->nothing, fieldcount(Foo))...); # you can also fill an array and use `...`
julia> Foo()
Foo(nothing, nothing, nothing)