[英]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.