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

鲁斯兰·普罗科普丘克(Ruslan Prokopchuk)

如果我有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)
托沃·亨宁森(Toivo Henningsson)

当您遇到可以使用类型但不能使用其任何子类型的情况时,通常可以通过在适当的位置引入类型参数来进行使用。以下似乎有效:

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在 Julia 中为抽象类型的所有参数子类型定义方法?

来自分类Dev

如何在Rust中将类型参数指定为函数参数?

来自分类Dev

如何在 Julia Base 中查找抽象类型的子类型?

来自分类Dev

如何在Kotlin中将“自己的类型”指定为返回类型

来自分类Dev

如何在Idris中将数字范围指定为类型?

来自分类Dev

如何在ocaml中将函数参数和返回类型指定为List?

来自分类Dev

如何在Scala中反映与抽象类型的类型参数相对应的具体类型?

来自分类Dev

指定抽象类型成员

来自分类Dev

Scala Akka:使用子类型参数实现抽象类

来自分类Dev

参数局部抽象类型

来自分类Dev

引用类型参数的抽象类型成员

来自分类Dev

如何在F#中创建类型参数抽象类型?

来自分类Dev

如何在TypeScript中将函数的返回类型指定为名称空间类型,以便提出建议

来自分类Dev

如何指定抽象方法的返回类型是子类的类型

来自分类Dev

抽象类的具体子类的Typescript类型

来自分类Dev

在C ++中将函数返回类型指定为模板参数

来自分类Dev

如何返回抽象类型?

来自分类Dev

如何对抽象类型使用类型约束

来自分类Dev

如何在期望抽象父类型的地方使用子类型

来自分类Dev

Julia中抽象类型数组的用法

来自分类Dev

如何在Julia中将向量用作类型参数

来自分类Dev

如何在Julia中将向量用作类型参数

来自分类Dev

Scala:使用类型参数或抽象类型作为类型界限

来自分类Dev

如何指定抽象类方法的返回类型

来自分类Dev

如何指定抽象类方法的返回类型

来自分类Dev

如何在AGDA中定义抽象类型

来自分类Dev

如何在AGDA中定义抽象类型

来自分类Dev

理解抽象类型

来自分类Dev

无限通配符类型参数vs抽象类型

Related 相关文章

热门标签

归档