具有多次调度的 Array 的 Array 的 Julia 参数函数 [英] Julia parametric function for Array of Array with multiple dispatch
问题描述
我正在尝试编写两个具有相同名称的函数,它们可以利用 Julia 的多个调度工具并涉及数组和数组数组.
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.
假设有这三个输入变量
# 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
.
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
现在,如果我将函数定义更改为 x::Array{Array{Float64,1},1}
这将起作用.但我的问题是 Array{Array}
不应该采用任何类型的数组吗?
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?
推荐答案
是不是 Array{Array} 应该采用任何类型的 Array 数组?
is isn't Array{Array} supposed to take any kind of Arrays of Array?
是的,不是的……应该是这样,但不是这样.
yes and no... it is supposed to but not in this way.
我猜你已经知道 Julia 的类型参数是不变的.
注意 Array
本身是一个参数类型,所以你应该使用 Array{T}
where T<:Array
而不是 数组{数组}
:
note that Array
itself is a parametric type, so you should use Array{T}
where T<:Array
instead of Array{Array}
:
function test{T<:Array}(x::Array{T})
println("received an array of array => $(typeof(x))")
end
这篇关于具有多次调度的 Array 的 Array 的 Julia 参数函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!