Параметр функции Vector{AbstractString} не будет принимать входные данные вектора {String} в 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 ответ

Вам нужно написать сигнатуру функции следующим образом:

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

На Julia 0.6 и новее тоже можно написать вместо

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

Это является следствием параметрической инвариантности типов в Юлии. См. Главу о типах в руководстве для более подробной информации.

Другие вопросы по тегам