假设我定义了类似
的类型type Point{Tx, Ty} end
然后我创建了这种类型的变量,例如
a = Point{Int64, :something}()
现在,我只知道我可以通过a
获得typeof(a)
的类型。也就是Point{Int64, :something}
。
但是,我需要的只是参数Tx
和Ty
。
我有办法获得这些参数Tx
和Ty
吗?
答案 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