2014-01-30 2 views
8

следующий код Julia:Vector {AbstractString} Параметр функции не будет принимать Вектор {строка} ввода в Джулии

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

И далее, как правило, соответствует AbstractStringString как в:

function foo(::AbstractString) 
end 
foo("a") 

Как можно вызвать функцию с параметром Vector{AbstractString}, если у меня есть String элементы?

ответ

8

Вам нужно написать функцию подписи, как это:

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

На Юли 0,6 и новее, это также можно написать вместо

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

Это является следствием параметрического типа инвариантности в Джулию , Дополнительную информацию см. В руководстве пользователя chapter on types.

Смежные вопросы