В Юлии: поля инициализировать ни с чем
У меня есть 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 ответ
Решение
Ты можешь использовать 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)