朱莉娅:无法将JLD.AssociativeWrapper转换为Dict

时间:2018-10-26 19:42:40

标签: dictionary julia

我是茱莉亚的新人,所以请原谅任何明显的错误。

我必须使用一些最新的JLD package过时的旧代码,但由于其他原因还必须使用最新的JLD,因此请尝试更正以下代码以使其与最新的JLD一起使用。

    indexes = Dict[]
    for (i, index_filepath) in enumerate(indexes_filepaths)
        if !isfile(index_filepath)
            index = index_ngsim_trajectory(filepaths[i], minlength=minlength)
            JLD.save(index_filepath, "index", index)
        else
            index = JLD.load(index_filepath)["index"]
        end

        push!(indexes, index)
    end

push!行给出以下错误:

Cannot 'convert' an object of type getfield(JLD, Symbol("##JLD.AssociativeWrapper{Core.Any,Core.Any,Base.Dict{Core.Any,Core.Any}}#378")) to an object of type Dict

我尝试了以下方法。

  1. 更改indexes = JLD.AssociativeWrapper{Any, Any, Dict{Any, Any}}[]。这给了我无论如何使用/不使用JLD.AssociativeWrapper{Core.Any, Core.Any, Dict{Core.Any, Core.Any}}的组合都无法转换Core的错误。

  2. 编写转换方法。

function convert(::Type{Dict}, x::JLD.AssociativeWrapper{K,V,T}) where {K,V,T} keys = x.keys values = x.values Dict(zip(keys, values)) end

,然后将最后一行更改为push!(indexes, convert(Dict, index))。这给出了错误

no method matching convert(::Type{Dict}, ::getfield(JLD, Symbol("##JLD.AssociativeWrapper{Core.Any,Core.Any,Base.Dict{Core.Any,Core.Any}}#378"))) Closest candidates are: convert(::Type{Dict}, !Matched::JLD.AssociativeWrapper{K,V,T}) where {K, V, T} at

所以它看到了我的convert,但也许我在某个地方犯了一个基本的Julia语法错误?

我觉得编写转换是一种更好的方法,以免破坏期望这里返回Dict[]的任何其他旧代码。

0 个答案:

没有答案