Julia 类型断言的奇怪行为

Julia 类型断言的奇怪行为,julia,Julia,为了简单起见,假设我定义了以下函数: function returnVectorOrMatrix() vals = Array(Array{Float32,1}, 10) # vector in this definition return vals::Array{Array{Float32},1} end arr = returnVectorOrMatrix() 令我大吃一惊的是,它产生了以下错误: ERROR: type: typeassert: expected A

为了简单起见,假设我定义了以下函数:

function returnVectorOrMatrix()
    vals = Array(Array{Float32,1}, 10)   # vector in this definition
    return vals::Array{Array{Float32},1}
end

arr = returnVectorOrMatrix()
令我大吃一惊的是,它产生了以下错误:

ERROR: type: typeassert: expected Array{Array{Float32,N},1},
got Array{Array{Float32,1},1}
有没有人有很好的逻辑推理来解释为什么会这样? 因为
Array{Array{Float32,1},1}
只是
Array{Array{Float32,N},1}
N=1
的一个特例,所以如果
Julia
是多重分派,我希望这样的函数可以正常工作(而且看起来也很逻辑/直观)

提示:

julia> Array{Float32,1} <: Array{Float32}
true

julia> Array{Array{Float32,1},1} <: Array{Array{Float32},1}
false

julia> Array{Array{Float32,1},1} <: Array{Array{Float32,1}}
true
我认为这里的机制与以下情况相同:

julia> Array{Int32,1} <: Array{Int,1}
false
julia>Array{Int32,1}提示:

我认为这里的机制与以下情况相同:

julia> Array{Int32,1} <: Array{Int,1}
false

julia>Array{Int32,1}我认为问题在于Array{Float32}实际上是Array{Float32,N},而不是Array{Float32,1}(与Vector{Float32}相同)。

我认为问题在于Array{Float32}实际上是Array{Float32,N},而不是Array{Float32,1}(与Vector{Float32}相同)