![](/img/trans.png)
[英]How to use an union of array and parametric NTuple as function argument type in 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
上述方法適用於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}
則可以使用。 但是我的問題是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.