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

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

function funky(arg::Dict{String, Any})
    return "Oh, hi mark."
end
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."

回答

如果您像在第一个版本的 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."

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

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

julia> typeof([0 1; 2 3]) <: Any # second version
true

  • You can also call this `arg::Dict{String}` and leave off the second type parameter.

以上是为什么Julia的Dict{String,Any}不接受“任何”值的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>