我正在尝试编写两个具有相同名称的函数,这些函数可以使用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
和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}
this将起作用.但我的问题是不Array{Array}
应该采用任何类型的数组阵列?
如何在数组数组上使用内部类型参数?
是不是Array {Array}应该采用任何类型的数组数组?
是和否......它应该但不是这样.
我猜你已经知道朱莉娅的类型参数是不变的.
请注意,Array
它本身是参数类型,因此您应该使用Array{T}
where T<:Array
而不是Array{Array}
:
function test{T<:Array}(x::Array{T}) println("received an array of array => $(typeof(x))") end