"b"]) b=Dict(["a"=>3]) c=Dict(["a"=>"c"]) 我想要一个无需-6ren">
gpt4 book ai didi

dictionary - julia 0.6 中不同类型字典的向量

转载 作者:行者123 更新时间:2023-12-04 22:42:02 27 4
gpt4 key购买 nike

我对新的where有点困惑Julia 0.6 中的语法。
我有这样的事情:

a=Dict(["a"=>"b"])
b=Dict(["a"=>3])
c=Dict(["a"=>"c"])

我想要一个无需进行显式转换即可接收字典向量的函数。
我试过:
function bbb(a::Vector{Dict{String, Any}})
println(a)
end

它没有用。

然后我试过
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

为了进行显式转换,我已经用我可以收到的每个组合重载了 bbb。但我仍然想知道如何正确地做到这一点。

最佳答案

这是行动的不变性。这是一个复杂的情况,因为有两个级别的参数化,但原理是相同的。

  • Dict{String, Any}描述一个字典,其中键是字符串,值类型正好是 Any .参数不变性意味着 Dict{String, Int}不是 Dict{String, Any} 的子类型.
  • Dict{String, T} where T用字符串键描述所有字典。类型 var T可以匹配任何类型,包括 AnyInt .

  • 现在,当你开始谈论字典向量时,同样的原则适用:
  • 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 TDict{String, Int} .

  • 您可以使用速记符号更简单地表达这一点:
    function bbb(a::Vector{<: Dict{String, <: Any}})
    println(a)
    end

    关于dictionary - julia 0.6 中不同类型字典的向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45219387/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com