请问有人能帮我理解为什么我的julia函数定义不被我下面的使用尝试所匹配吗?
我天真地认为传入函数的Array{ASCIIString,1}
应该与Array{AbstractString,1}
的函数定义相匹配,依此类推。
julia> function test(a::Array{AbstractString,1}, b::AbstractString, c::Any) end
test (generic function with 1 method)
julia> test([""],"","")
ERROR: MethodError: `test` has no method matching test(::Array{ASCIIString,1}, ::ASCIIString, ::ASCIIString)
Closest candidates are:
test(::Array{AbstractString,1}, ::AbstractString, ::Any)
julia>
issubtype(Array{ASCIIString,1},Array{AbstractString,1})
为false。请查看http://docs.julialang.org/en/release-0.4/manual/types/#man-parametric-types获取更多信息。 - Dan Getzfunction test{T<:AbstractString}(a::Array{T}, b::T, c::Any)
,尽管如果您想允许a
的元素类型与b
的类型不同,您可能需要第二个类型参数... - Colin T Bowersa
的元素类型和b
的类型不同,则function test{T <: AbstractString}(a :: Array {T},b :: AbstractString,c :: Any)
就足够了。关键点是ASCIIString<:AbstractString
为true
,但是Array{ASCIIString, 1} <: Array{AbstractString, 1}
则为false
。 - Colin T Bowers