我正在尝试创建一个嵌套的类型,但需要最低级别作为类型规范的一部分才能从右侧的parmaeterized抽象类型中进行子类型化。但是,出现以下错误:
immutable Type1{T} <: AbstractT{T}
x::Vector{T}
end
immutable Type2{T,T2} <: AbstractT{T2}
x::Vector{T{T2}}
end
有没有一种方法可以将T2用于规范?
答案 0 :(得分:9)
目前尚未实施这种类型的计算。标准的解决方法是这样的:
immutable Type2{T2,VTT2} <: AbstractT{T2}
x::VTT2
end
Type2{T2}(x::Vector{Type1{T2}}) = Type2{T2, typeof(x)}(x)
如果您真的担心有人违背背后的规则,您可以在内部构造函数中进一步强制执行约束。