假設我定義類型一樣,獲取的參數類型的參數
type Point{Tx, Ty} end
然後,我創建這種類型的變量,例如,現在
a = Point{Int64, :something}()
,我只知道我可以通過typeof(a)
得到a
的類型。那就是,Point{Int64, :something}
。 但是,我需要的僅僅是參數Tx
和Ty
。
有什麼方法可以得到這些參數Tx
和Ty
?
假設我定義類型一樣,獲取的參數類型的參數
type Point{Tx, Ty} end
然後,我創建這種類型的變量,例如,現在
a = Point{Int64, :something}()
,我只知道我可以通過typeof(a)
得到a
的類型。那就是,Point{Int64, :something}
。 但是,我需要的僅僅是參數Tx
和Ty
。
有什麼方法可以得到這些參數Tx
和Ty
?
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
您可以定義一個函數如下
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))