I have just made the same mistake this morning.
On Monday, March 16, 2015 at 1:05:32 PM UTC+1, Simon Danisch wrote:
>
> 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
>>
>>
>>