Types 如何在Julia中将抽象类型的子类型指定为类型参数?

Types 如何在Julia中将抽象类型的子类型指定为类型参数?,types,julia,Types,Julia,如果我有,比如说,抽象组件,并且想要它的任何子类型类型的向量,我应该如何指定向量的类型参数?这个幼稚的片段不起作用: type Position<:Component x::Real y::Real end v = Vector{Type{Component}} push!(v, Position) ERROR: MethodError: `push!` has no method matching push (::Type{Array{Type{Component},1}}

如果我有,比如说,
抽象组件
,并且想要它的任何子类型类型的向量,我应该如何指定
向量
的类型参数?这个幼稚的片段不起作用:

type Position<:Component
  x::Real
  y::Real
end

v = Vector{Type{Component}}

push!(v, Position)

ERROR: MethodError: `push!` has no method matching push (::Type{Array{Type{Component},1}}, ::Type{Position})
Closest candidates are:
  push!(::Any, ::Any, ::Any)
  push!(::Any, ::Any, ::Any, ::Any...)
  push!(::Array{Any,1}, ::ANY)

type Position当您遇到可以使用类型但不能使用其任何子类型的情况时,通常会在正确的位置引入类型参数。以下似乎有效:

abstract Component

type Position<:Component
  x::Real
  y::Real
end

typealias ComponentType{T<:Component} Type{T}

v = Vector{ComponentType}()

push!(v, Position)
抽象组件

键入Position编辑:托维奥有趣的回答是正确的,我完全误解了这个问题

为了创建一个空的
向量{Component}
,您需要执行以下操作:

julia>abstract Foo
朱莉娅>v₁ = Foo[]
0元素数组{Foo,1}
朱莉娅>v₂ = 向量{Foo}()
0元素数组{Foo,1}
朱莉娅>v₃ = 数组(Foo,0)
0元素数组{Foo,1}
朱莉娅>@assert v₁::向量{Foo}==v₂::向量{Foo}==v₃::向量{Foo}
例如:

julia>用于T英寸(:Bar,:Baz,:Qux)
@评估类型$T bar,baz,qux=bar(),baz(),qux()
(Bar(),Baz(),Qux())
julia>对于ans中的obj
推(五)₁, (obj)
结束
朱莉娅>v₁
三元素数组{Foo,1}:
Bar()
Baz()
Qux()

你说你想按
——什么是
?您想改为按
位置
吗?确实!谢谢,现在应该修好了。谢谢,这正是我一直在寻找的东西!说到动机,我不关心在这种特殊情况下的优化,但希望有额外的typeassert障碍。好的,是的,我同意,有时候如果你试图使用任何不想要的类型,你会发现一个错误,这真的很好。