繁体   English   中英

以字符串作为键和任何值的字典

[英]Dictionaries with strings as keys and any values

我正在尝试定义一个将字符串作为键和任何值的字典。 因此,我尝试使用Dict{String, <:Any}作为类型。 但是,该表达式的返回值是

> Dict{String,#s27} where #s27

此外,如果我尝试定义该类型的字典,则会出现错误:

  • 对于Dict{String,<:Any}()我得到ERROR: MethodError: no method matching Dict{String,#s28} where #s28()
  • 对于Dict{String,<:Any}("aa"=>42)我得到ERROR: MethodError: no method matching Dict{String,#s29} where #s29(::Pair{String,Int64})

我也尝试使用Dict{String} (应该是等效的),结果相似。

我在这里缺少什么类型的字典?

您正在寻找的是Dict{String, Any} ,而不是Dict{String, <:Any} 第一个是具体类型,即以字符串为键,以任何为值的字典。 第二个, Dict{String, <:Any}实际上不是一个具体的类型,而是一个unionall类型。 这意味着它是一个无限的类型集 您看到的错误是您无法实例化这组类型。 您只能实例化具体(叶)类型。

另一种写Dict{String, <:Any}Dict{String, T} where T <: Any ,这使它更清楚它是什么。 它是所有类型的Dict的集合,它们的键类型是String ,而值类型是Any的子类型。

例如,我们可以说Dict{String, Int}是无限集Dict{String, <:Any}的子类型。

编辑: unionall 类型的一种用途是能够将您采用的类型限制为细粒度级别。 例如,一个计数函数可能如下所示:

function count_stuff(stuff, counter::Dict{T, <:Integer}) where T
     # stuff here¨
end

这里的第二个参数是一个Dict ,它有一些Integer子类型作为值类型,任何类型作为键类型。 这基本上就是您将 dict 用作​​计数器所需的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM