当前位置:  开发笔记 > 编程语言 > 正文

具有多个调度的Array数组的Julia参数函数

如何解决《具有多个调度的Array数组的Julia参数函数》经验,为你挑选了1个好方法。

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

以上方法适用于ab,但不会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}应该采用任何类型的数组阵列?

如何在数组数组上使用内部类型参数?



1> Gnimuc..:

是不是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

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有