我是茱莉亚的新人,所以请原谅任何明显的错误。
我必须使用一些最新的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
我尝试了以下方法。
更改indexes = JLD.AssociativeWrapper{Any, Any, Dict{Any, Any}}[]
。这给了我无论如何使用/不使用JLD.AssociativeWrapper{Core.Any, Core.Any, Dict{Core.Any, Core.Any}}
的组合都无法转换Core
的错误。
编写转换方法。
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[]
的任何其他旧代码。