我正在尝试编写两个同名的函数,它们可以利用 Julia 的多重调度功能,并涉及数组和数组数组。
假设有这三个输入变量
# 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]
我这样写两个函数
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
上述方法适用于a
and b
但不是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
现在如果我将函数定义更改为x::Array{Array{Float64,1},1}
这会起作用。但我的问题是不是Array{Array}
应该采用任何类型的数组数组吗?
应如何使用数组数组上的内部类型参数?