Vector {AbstractString}函数参数不接受julia中的Vector {String}输入

时间:2014-01-30 19:32:25

标签: julia invariance

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参数的函数?

1 个答案:

答案 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