簡體   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