获取参数类型的参数

时间:2016-03-02 22:50:44

标签: types julia

假设我定义了类似

的类型
type Point{Tx, Ty} end

然后我创建了这种类型的变量,例如

a = Point{Int64, :something}()

现在,我只知道我可以通过a获得typeof(a)的类型。也就是Point{Int64, :something}。 但是,我需要的只是参数TxTy

我有办法获得这些参数TxTy吗?

2 个答案:

答案 0 :(得分:4)

您可以按如下方式定义功能

eltypes{Tx,Ty}(::Type{Point{Tx, Ty}}) = (Tx, Ty)
eltypes(p) = eltypes(typeof(p))

(此处::Type{Point{Tx, Ty}}匹配Point{Tx, Ty}类型的参数)并使用它

julia> eltypes(Point{Int, Float64}())
(Int64,Float64)

这是一种经常使用的习语,例如在Base中有类似的功能

eltype{T}(::Type{Set{T}}) = T
eltype(x) = eltype(typeof(x))

答案 1 :(得分:3)

typeof(a)DataType,其中包含许多字段。你可以通过以下方式获得这些名字:

julia> fieldnames(DataType)
10-element Array{Symbol,1}:
 :name        
 :super       
 :parameters  
 :types       
 :instance    
 :size        
 :abstract    
 :mutable     
 :pointerfree 
 :ninitialized

所以如果您需要这些参数,请运行

julia> collect(typeof(a).parameters)
2-element Array{Any,1}:
 Int64     
 :something