Julia中使用Any类型实现多分派时的方法匹配问题
问题原因
Julia 中的容器类型(比如Dict)是不变类型(invariant)——即使String <: Any,Dict{String, Matrix{Float64}}也不属于Dict{Any, Matrix{Float64}}的子类型。你原函数的参数限定了字典键类型必须是Any,但传入的qTable键类型是String,因此触发MethodError。
解决方案
最推荐的方式是使用类型参数让函数支持任意键类型的字典,同时保留编译时类型检查的优势:
function findBestAction(state::Tuple{Int64, Int64}, qTable::Dict{K, Matrix{Float64}}) where K doSomething() end
这里的K是类型参数,代表任意合法的字典键类型,无论是String、Int还是其他类型,只要字典的值是Matrix{Float64},就能匹配这个函数方法。
如果不需要严格的类型约束(不推荐,会损失类型安全性),也可以直接简化参数类型:
function findBestAction(state::Tuple{Int64, Int64}, qTable::Dict) doSomething() end
内容的提问来源于stack exchange,提问作者PokeLu
相关产品推荐
相关产品推荐

