簡體   English   中英

具有多個調度的Array數組的Julia參數函數

[英]Julia parametric function for Array of Array with multiple dispatch

我正在嘗試編寫兩個具有相同名稱的函數,這些函數可以利用Julia的多個調度功能以及涉及的Arrays和Arrays Arrays。

假設有這三個輸入變量

# 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}則可以使用。 但是我的問題是Array{Array}應該采用任何類型的Array?

如何在數組數組上使用內部類型參數?

Array {Array}是否應該采用任何類型的Array?

是和否...應該,但不是這樣。

我猜您已經知道Julia的類型參數是不變的

請注意, Array本身是參數類型,因此您應使用Array{T} ,其中T<:Array而不是Array{Array}

function test{T<:Array}(x::Array{T})
    println("received an array of array => $(typeof(x))")
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM