以下是设计使然吗?
ASCIIString <: String返回true,但是Array{ASCIIString,1} <: Array{String,1}返回false

也许这是一个错误,我应该在github上发出拉取请求。 (我正在运行v0.4.0-dev + 6210)

最佳答案

只需将我的评论转换为答案即可:

您问题的答案是“是”。正如朱莉娅的document所说:

用类型论的话来说,朱莉娅的类型参数是不变的,而不是协变的(甚至是互变的)。

在下面的误导性案例中,可能会发现

julia> Int64 <: Int
true

julia> Array{Int64,1} <: Array{Int,1}
true

这是因为IntInt64是相同的类型。
julia> xdump(Int)
Int64::DataType  <: Signed

julia> xdump(Int64)
Int64::DataType  <: Signed

julia> xdump(Array{Int,1})
Array{Int64,1}::DataType  <: DenseArray{Int64,1}

julia> xdump(Array{Int64,1})
Array{Int64,1}::DataType  <: DenseArray{Int64,1}

我们可以使用typejoin来检查A类型和B类型及其对应的“数组”之间的关系。
julia> typejoin(Int64,Int)
Int64

julia> typejoin(Array{Int64,1},Array{Int,1})
Array{Int64,1}


julia> typejoin(ASCIIString,String)
String

julia> typejoin(Array{String,1},Array{ASCIIString,1})
Array{T,N} (constructor with 9 methods)

09-10 02:34
查看更多