我where对julia 0.6中的新语法有点困惑.我有这样的事情:
a=Dict(["a"=>"b"])
b=Dict(["a"=>3])
c=Dict(["a"=>"c"])
Run Code Online (Sandbox Code Playgroud)
我想要一个接收字典向量而不必进行显式转换的函数.我尝试过:
function bbb(a::Vector{Dict{String, Any}})
println(a)
end
Run Code Online (Sandbox Code Playgroud)
它没有用.
然后我尝试了
function bbb(a::Vector{Dict{String, T} where T})
println(a)
end
bbb([a,b]) #Works
bbb([a,c]) #Fails
bbb([a,b,c]) #Works
Run Code Online (Sandbox Code Playgroud)
为了进行明确的转换,我已经为每个组合重载了bbb.但我仍然想知道如何正确地做到这一点.
Mat*_* B. 10
这是行动中的不变性.这是一个复杂的案例,因为有两个级别的参数化,但原理是相同的.
Dict{String, Any}描述了一个字典,其中键是字符串,值类型是精确的Any.参数不变性意味着Dict{String, Int}是不的子类型Dict{String, Any}.Dict{String, T} where T描述所有带字符串键的字典.类型var T可以匹配任何类型,包括Any或Int.现在,当您开始讨论字典向量时,同样的原则适用:
Vector{Dict{String, T} where T}描述了一个元素类型正好 的向量Dict{String, T} where T.参数不变性意味着Vector{Dict{String, Int}}是不的子类型Vector{Dict{String, T} where T}.Vector{D} where D <: (Dict{String, T} where T)描述元素是带字符串键的字典的所有向量.类型var D可以匹配键是字符串的任何字典类型,包括Dict{String, T} where T或Dict{String, Int}.您可以使用简写符号更简单地表达这一点:
function bbb(a::Vector{<: Dict{String, <: Any}})
println(a)
end
Run Code Online (Sandbox Code Playgroud)