簡體   English   中英

獲取參數類型的參數

[英]Get parameters of a parametric type

假設我定義了類似的類型

type Point{Tx, Ty} end

然后我創建一個這種類型的變量,例如,

a = Point{Int64, :something}()

現在,我只知道我能得到的類型, atypeof(a) 也就是說, Point{Int64, :something} 但是,我需要的只是參數TxTy

我有辦法獲得這些參數TxTy嗎?

您可以按如下方式定義函數

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM