It should be commonprefix{S <: AbstractString}(str_arr::Vector{S})
(Vector -> typealias Vector{T} Array{T, 1})
What you told julia with Vector{AbstractString} is that the function only
takes Vectors with the element type of AbstractString.
Though, ["asdasd", "adasd"] has the concrete element type of ASCIIString
Am Montag, 16. März 2015 12:50:19 UTC+1 schrieb Julia User:
>
> just some simple beginners question:
>
>
> *1. Question:* Why does *Array{AbstractString,1}*: not work?
>
> ERROR: LoadError: MethodError: `commonprefix` has no method matching
> commonprefix(::Array{ASCIIString,1})
>
>
> function commonprefix(str_arr::Array{AbstractString,1})
> min_idx = indmin(str_arr)
> common_prefix = str_arr[min_idx]
> common_length = length(common_prefix)
> # Other code skipped
> return common_length
> end
>
> common_endidx = commonprefix(["/home/Downloads/test",
> "/home/Downloads/othertest"])
> println("AbstractString: $common_endidx")
>
>
>
>
>
>
> *2. Question:* is there an easy way to avoid rewriting most of the
> functions code
>
>
>
> function commonprefix(str_arr::Array{ASCIIString,1})
> min_idx = indmin(str_arr)
> common_prefix = str_arr[min_idx]
> common_length = length(common_prefix)
> # Other code skipped
> return common_length
> end
>
> function commonprefix(str_arr::Array{UTF8String,1})
> min_idx = indmin(str_arr)
> common_prefix = str_arr[min_idx]
> common_length = length(common_prefix)
> # Other code skipped
> return common_length
> end
>
>
> # ASCIIString
> common_endidx = commonprefix(["/home/Downloads/test",
> "/home/Downloads/othertest"])
> println("ASCIIString: $common_endidx")
> # UTF8String
> common_endidx = commonprefix(["/home/Downloads/átomos",
> "/home/Downloads/otherátomos"])
> println("UTF8String: $common_endidx")
>
>
>
> Thanks
>
>
>