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

The*_*lar 9 julia invariance

Julia中的以下代码:

function foo(a::Vector{AbstractString})  
end
foo(["a"])
Run Code Online (Sandbox Code Playgroud)

给出以下错误:

ERROR: MethodError: no method matching foo(::Array{String,1})
Closest candidates are:
  foo(::Array{AbstractString,1}) at REPL[77]:2
Run Code Online (Sandbox Code Playgroud)

即使以下代码运行,如预期的那样:

function foo(a::Vector{String})  
end
foo(["a"])
Run Code Online (Sandbox Code Playgroud)

此外,AbstractString通常匹配String如下:

function foo(::AbstractString)  
end
foo("a")
Run Code Online (Sandbox Code Playgroud)

Vector{AbstractString}如果我有String元素,如何用参数调用函数?

Ste*_*ski 10

你需要像这样编写函数签名:

function foo{S<:AbstractString}(a::Vector{S})
    # do stuff
end
Run Code Online (Sandbox Code Playgroud)

在朱莉娅0.6和更新,它也可以写

function foo(a::Vector{<:AbstractString})
    # do stuff
end
Run Code Online (Sandbox Code Playgroud)

这是Julia中参数类型不变性的结果.有关详细信息,请参阅手册中的类型一章.