如果我有abstract Component
一个想要任何子类型的向量,我该如何指定Vector
类型参数?这个天真的片段不起作用:
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)
当您遇到可以使用类型但不能使用其任何子类型的情况时,通常可以通过在适当的位置引入类型参数来进行使用。以下似乎有效:
abstract Component
type Position<:Component
x::Real
y::Real
end
typealias ComponentType{T<:Component} Type{T}
v = Vector{ComponentType}()
push!(v, Position)
请注意,通过在构造中使用类型参数,我们创建了一个新类型ComponentType
,它Component
属于任何子类型(包括Component
自身)typealias
。
现在,在实践中,我不确定您是否通过这样做而不是让v = Vector()
;获得了很多收益?我认为额外的类型信息不会让Julia编译器在这种情况下执行任何特定的优化。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句