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障碍。好的,是的,我同意,有时候如果你试图使用任何不想要的类型,你会发现一个错误,这真的很好。