Параметр функции 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
Это является следствием параметрической инвариантности типов в Юлии. См. Главу о типах в руководстве для более подробной информации.