数组在Julia中打破了字符串类型

fpr*_*rac 2 arrays string types julia

以下是设计?

ASCIIString <: String返回true,但 Array{ASCIIString,1} <: Array{String,1}返回false.

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

Gni*_*muc 5

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

你的问题的答案是肯定的.正如朱莉娅的文件所说:

在类型理论的说法中,朱莉娅的类型参数是不变的,而不是协变的(甚至是逆变的).

在下面的误导性案例中,人们可能会发现这一点

julia> Int64 <: Int
true

julia> Array{Int64,1} <: Array{Int,1}
true
Run Code Online (Sandbox Code Playgroud)

这是因为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}
Run Code Online (Sandbox Code Playgroud)

我们可以typejoin用来检查类型A和类型之间的关系B以及它们对应的"数组".

julia> typejoin(Int64,Int)
Int64

julia> typejoin(Array{Int64,1},Array{Int,1})
Array{Int64,1}
Run Code Online (Sandbox Code Playgroud)

julia> typejoin(ASCIIString,String)
String

julia> typejoin(Array{String,1},Array{ASCIIString,1})
Array{T,N} (constructor with 9 methods)
Run Code Online (Sandbox Code Playgroud)