This is called "parametric invariance"; you can find the term if you search the Julia manual and archives of this list.
On Thu, Aug 11, 2016 at 10:41 AM, Yichao Yu <[email protected]> wrote: > > > On Thu, Aug 11, 2016 at 8:52 PM, Stefan Kruger <[email protected]> > wrote: > >> This surprised me: >> >> function hello(data::Array{AbstractString, 1}) >> map(println, data) >> end >> >> julia> function hello(data::AbstractString) >> println(data) >> end >> hello (generic function with 1 method) >> >> julia> hello("hello") >> hello >> >> julia> function hello_array(data::Array{AbstractString, 1}) >> map(println, data) >> end >> hello_array (generic function with 1 method) >> >> julia> hello_array(["Hello"]) >> ERROR: MethodError: `hello_array` has no method matching >> hello_array(::Array{ASCIIString,1}) >> > > `T{A}` is not a subtype of `T{B}` even if `A<:B` > > `hello{T<:AbstractString}(data::Array{T,1})` > > >> >> I had expected that Array{AbstractString, 1} meant "1-d array of anything >> string-like" and that passing an >> array of ASCIIString would qualify, but I must be missing something >> central. >> >> How would I declare a function parameter that is an array that can hold >> any string type? >> >> Many thanks for any pointers. >> >> Stefan >> > >
