I have to question to the following code:

I get an MethodError message if I run the code below:
“LoadError: MethodError: no method matching ox1(::Array{Int64,2}, ::Array{Int64,2})”
But actually I don´t understand why, because Int64 is a subtype of Number. What I´m doing wrong? 
Is there a way that randperm returns an array of size Array{Int64,2} instead of reshaping it? Or how can I code my methods that they work on both Array{Number,1} and Array{Number,2} without overloading the method and without performance loss?
using Random
using Crossover
# Order crossover
v1 = reshape(randperm(2000), 2000, 1)
v2 = reshape(randperm(2000), 2000, 1)
@time c1, c2 = Crossover.ox1(v1, v2)
module Crossover
# Order crossover
function ox1(v1::Array{Number,2}, v2::Array{Number,2})
s = length(v1)
from, to = rand(1:s, 2)
# while from == to
# from, to = rand(1:s, 2)
# end
from, to = from > to ? (to, from) : (from, to)
c1 = zeros(Int64, size(v1))
c2 = zeros(Int64, size(v2))
# Swap
c1[from:to] = v2[from:to]
c2[from:to] = v1[from:to]
# Fill in from parents
k = to+1 > s ? 1 : to+1 #child1 index
j = to+1 > s ? 1 : to+1 #child2 index
for i in vcat(to+1:s,1:from1)
while in(v1[k],c1)
k = k+1 > s ? 1 : k+1
end
c1[i] = v1[k]
while in(v2[j],c2)
j = j+1 > s ? 1 : j+1
end
c2[i] = v2[j]
end
return c1, c2
end
end