【问题标题】:Arrays break string types in Julia数组打破了 Julia 中的字符串类型
【发布时间】:2015-10-19 22:09:07
【问题描述】:

以下是设计的吗?

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

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

【问题讨论】:

  • 我不认为这是一个错误。 Int <: Number 返回真,Array{Int,1} <: Array{Number,1} 返回假。请仔细阅读document
  • @GnimucKey,谢谢!我明白了。

标签: arrays string types julia


【解决方案1】:

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

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

用类型论的说法,Julia 的类型参数是不变的,而不是协变的(甚至是逆变的)。

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

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)

【讨论】:

    猜你喜欢
    • 2018-12-02
    • 2021-10-05
    • 2015-03-06
    • 1970-01-01
    • 2023-02-03
    • 2020-05-08
    • 1970-01-01
    • 2023-02-16
    • 2021-04-11
    相关资源
    最近更新 更多