I am trying to write two functions with same name that can make use of multiple dispatch facility of Julia and involved Arrays and Arrays of Array.
Suppose there are these three input variables
# typeof(a) => Array{Array{T,N},1}
a=Array[[1,2,3],[4,5,6]]
# typeof(b) => Array{Int64,1}
b=[1,2,3]
# typeof(c) => Array{Array{Float64,1},1}
c=[rand(10) for i in 1:2]
And I write the two functions like this
function test(x::Array{Array})
println("received an array of array => $(typeof(x))")
end
function test{T<:Number}(x::Array{T,1})
println("received a vector. converting.....")
nx = Array[x]
test(nx)
end
The above approach works for a
and b
but not c
.
test(a)
# received an array of array => Array{Array{T,N},1}
test(b)
# received a vector. converting.....
# received an array of array => Array{Array{T,N},1}
test(c)
# LoadError: MethodError: `test` has no method matching test(::Array{Array{Float64,1},1})
# while loading In[37], in expression starting on line 1
Now if I change the function definition to x::Array{Array{Float64,1},1}
this would work. But my question is isn't Array{Array}
supposed to take any kind of Arrays of Array?
How should one work with inner type parameter on an array of arrays?