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