2014-01-30 26 views
8

在朱莉婭下面的代碼:矢量{} 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"]) 

並進一步AbstractString大致匹配String爲:

​​

我怎麼能調用一個函數與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