我有一个具有默认值的不可变结构(感谢 Parameters.jl(,我想从我拥有的字典中创建此结构的实例(最初这些来自 JSON 文件(。但是,虽然我知道这些字典中可能的键集,但并非每个字典都有相同的键。我正在努力弄清楚如何通过算法将这些字典转换为我的不可变结构的实例。我该怎么做?
例如,我有:
@with_kw struct Mystruct
id::String
mass::Float64
names::Vector{String}=Vector{String}()
elements::Vector{String}=Vector{String}()
end
和许多字典,每个字典都可以有不同的键。它们都有id
和mass
(这就是为什么没有默认值的原因(,但每个字典可能有也可能没有names
和elements
。
似乎如果我使用可变结构,这将很容易,因为我可以初始化实例,然后在事后使用setfield!
- 但在可变结构"初始化"之前似乎没有办法做到这一点。
相关:以编程方式将参数传递给@kwdef结构
对于这个没有参数的简单结构,你可以像这样构造一个新的结构:
julia> kwargs = Dict(:id=>"test", :mass=> 1.)
Dict{Symbol,Any} with 2 entries:
:id => "test"
:mass => 1.0
julia> Mystruct(;kwargs...)
Mystruct
id: String "test"
mass: Float64 1.0
names: Array{String}((0,))
elements: Array{String}((0,))