9

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元素,如何调用带参数的函数?

4

1 回答 1

11

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

function foo{S<:AbstractString}(a::Vector{S})
    # do stuff
end

在 Julia 0.6 及更高版本上,也可以改为编写

function foo(a::Vector{<:AbstractString})
    # do stuff
end

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

于 2014-01-30T19:46:57.877 回答