【问题标题】:Vector{AbstractString} function parameter won't accept Vector{String} input in juliaVector{AbstractString} 函数参数在 julia 中不接受 Vector{String} 输入
【发布时间】:2014-02-23 07:23:02
【问题描述】:

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")

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

【问题讨论】:

    标签: julia invariance


    【解决方案1】:

    你需要这样写函数签名:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      • 2014-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-02
      • 1970-01-01
      相关资源
      最近更新 更多