This is because Julia's types are invariant (it's easy to find in the
documentation once you know what to look for):

g{S<:AbstractString}(s::Vector{S}) = println("here!")

On Wed, 2016-02-10 at 16:23, Ján Dolinský <jan.dolin...@2bridgz.com> wrote:
> Hi,
>
> I am facing the following dispatch problem:
>
> typealias MyString AbstractString
>
> g(s::Vector{MyString}) = println("here!")
> g(s::MyString) = println("there!")
>
> a = ["asd", "bvc", "qwerty"]
> b = ["asdť", "bvc", "qwerty"]
>
>
> println(typeof(a))
> Array{ASCIIString,1}
> println(typeof(b))
> Array{UTF8String,1}
>
> julia> g(a)
> ERROR: MethodError: `g` has no method matching g(::Array{ASCIIString,1})
>
> julia> g(b)
> ERROR: MethodError: `g` has no method matching g(::Array{UTF8String,1})
>
> julia> g(b[2])
> there!
>
> julia> g(a[2])
> there!
>
> How do I make the method g(s::Vector{MyString}) accept both vector of
> ASCIIString's or UTF8String's ? I expected the supertype AbstractString to
> automatically match the both cases.
>
> Thanks,
> Jan
>
> p.s. I am designing some functions that consumes filesystem paths. I assume, 
> it
> is good idea to make those paths to be ::AbstractString ; I see many functions
> related to filesystem in Julia manual to consume or return ::AbstractString

Reply via email to