参数化类型在Julia中未按预期工作

参数化类型在Julia中未按预期工作,julia,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 我当然希望,如果我创建了两个从同一参数类型派生的具体类型,一个是使用抽象类型作为参数,另一个是使用作为第一个派生所用抽象类型的子类型的具体类型,使用具体类型派生

朱莉娅对我来说是个新手,这让我快发疯了:

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中的类型是不变的,而不是协变或逆变的。从文件中引用:

Julia的类型参数是不变的,而不是协变或 甚至是反变的。这是出于实际原因:在任何情况下 点{Float64}在概念上可能类似于点{Real}的实例 此外,这两种类型在内存中具有不同的表示形式:

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


请参见

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

Julia的类型参数是不变的,而不是协变或 甚至是反变的。这是出于实际原因:在任何情况下 点{Float64}在概念上可能类似于点{Real}的实例 此外,这两种类型在内存中具有不同的表示形式:

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