【问题标题】:Parametric type not working as expected in Julia参数类型在 Julia 中无法按预期工作
【发布时间】:2015-04-30 22:56:16
【问题描述】:

我对 Julia 很陌生,这让我抓狂:

type MyType{T<:Number}
  x::T
  y::T
end
Float64 <: Number # this is true
MyType{Float64} <: MyType{Number} #this is for some reason false

我当然希望,如果我创建了两个从相同参数类型派生的具体类型,一个使用抽象类型作为参数,另一个使用具体类型,该具体类型是第一个使用的抽象类型的子类型派生时,使用具体类型派生的类型将是使用抽象类型派生的类型的子类型。

那句话花了我一段时间才写出来。希望它是可以理解的。

【问题讨论】:

标签: julia


【解决方案1】:

这是预期的行为:Julia 中的类型是不变的,而不是协变或逆变的。引用文档:

Julia 的类型参数是不变的,而不是协变的(或 甚至是逆变的)。这是出于实际原因:而任何实例 Point{Float64} 在概念上可能类似于 Point{Real} 的一个实例 同样,这两种类型在内存中的表示方式也不同:

Point{Float64} 的一个实例可以紧凑地表示并且 有效地作为一对立即数的 64 位值;一个实例 Point{Real} 必须能够容纳任何一对 Real 实例。自从 作为 Real 实例的对象可以是任意大小,并且 结构,实际上必须表示 Point{Real} 的实例 作为一对指向单独分配的 Real 对象的指针。

见manual

【讨论】:

    猜你喜欢
    • 2018-09-23
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多