具有多次调度的 Array 的 Array 的 Julia 参数函数 [英] Julia parametric function for Array of Array with multiple dispatch

查看:16
本文介绍了具有多次调度的 Array 的 Array 的 Julia 参数函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试编写两个具有相同名称的函数,它们可以利用 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

上述方法适用于 ab 但不适用于 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆