Julia中的以下代码:
function foo(a::Vector{AbstractString})
end
foo(["a"])
给出以下错误:
ERROR: MethodError: no method matching foo(::Array{String,1})
Closest candidates are:
foo(::Array{AbstractString,1}) at REPL[77]:2
即使以下代码按预期运行:
function foo(a::Vector{String})
end
foo(["a"])
此外,AbstractString
通常与String
匹配,如下所示:
function foo(::AbstractString)
end
foo("a")
如果我有Vector{AbstractString}
元素,如何调用带String
参数的函数?
答案 0 :(得分:10)
您需要编写如下函数签名:
function foo{S<:AbstractString}(a::Vector{S})
# do stuff
end
在Julia 0.6和更新版本上,也可以改为编写
function foo(a::Vector{<:AbstractString})
# do stuff
end
这是Julia中参数类型不变性的结果。有关详细信息,请参阅手册中的chapter on types。