在Julia中:不进行任何初始化的字段

时间:2018-10-23 14:43:20

标签: julia

我有一个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

1 个答案:

答案 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)