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}相同)