[英]Get parameters of a parametric type
假設我定義了類似的類型
type Point{Tx, Ty} end
然后我創建一個這種類型的變量,例如,
a = Point{Int64, :something}()
現在,我只知道我能得到的類型, a
由typeof(a)
。 也就是說, Point{Int64, :something}
。 但是,我需要的只是參數Tx
和Ty
。
我有辦法獲得這些參數Tx
和Ty
嗎?
您可以按如下方式定義函數
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))
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.