为什么 Julia 的 Dict{String, Any} 不接受“任何”值

Jon*_*nas 2 parameters dictionary julia

我写了一个函数,它应该带一个Dict{String, <anything>}(所以有任何值)。但是,当我指定所需的参数时,Dict{String, Any}该函数仅采用显式的Dict{String, Any}. 有没有办法让 aDict取任何值?

function funky(arg::Dict{String, Any})
    return "Oh, hi mark."
end
Run Code Online (Sandbox Code Playgroud)
julia> funky(Dict("Oh" => [0 1; 2 3]))
ERROR: MethodError: no method matching funky(::Dict{String,Array{Int64,2}})
Closest candidates are:
  funky(::Dict{String,Any})

julia> funky(Dict{String, Any}("Oh" => [0 1; 2 3]))
"Oh, hi mark."
Run Code Online (Sandbox Code Playgroud)

小智 6

如果您像在第一个版本的 funky 中那样编写它,则该函数不需要任何类型,而是完全类型Any,而在以下定义中,

julia> function funky(arg::Dict{String, <:Any})
  return "Oh, hi mark."
end

julia> funky(Dict("Oh" => [0 1; 2 3]))
"Oh, hi mark."
Run Code Online (Sandbox Code Playgroud)

Any接受任何子类型(所以所有类型),这是由于子类型 operator <:。你在你的第二个版本中隐含地做到了这一点。所以总结一下,主要的区别是:

julia> typeof([0 1; 2 3]) == Any # first verion
false

julia> typeof([0 1; 2 3]) <: Any # second version
true
Run Code Online (Sandbox Code Playgroud)

  • 您还可以调用此“arg::Dict{String}”并省略第二个类型参数。 (3认同)