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

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

最佳答案

您需要这样编写函数签名:

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

关于julia - Vector {AbstractString}函数参数将不接受julia中的Vector {String}输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21465838/

相关文章:

julia - 在 Julia Plotly.jl 中制作子图

julia - 有没有办法在 Julia 中绘制布局,每个图使用不同的颜色?

dataframe - Julia DataFrame的转置

arrays - 直观地解释为什么 `List` 是协变的,而 `Array` 是不变的?

Scala - 可变集合中的协变类型

c# - 无法在列表 C# 中保存通用接口(interface)实现

julia inf by inf 不同的结果

unicode - 为什么当我使用 (Apple 标志)unicode 时 Julia 返回 "\uf8ff"?