如何在Julia Base中找到抽象类型的子类型?

时间:2017-10-20 14:37:08

标签: julia

例如,假设我为AbstractFloat编写了一个函数,我想知道这个方法定义的影响,如何检查Base中AbstractFloat的所有子类型?

2 个答案:

答案 0 :(得分:4)

您正在寻找subtypes

  

返回DataType T的直接子类型列表。请注意,包括所有当前加载的子类型,包括当前模块中不可见的子类型。

julia> subtypes(AbstractFloat)
4-element Array{Union{DataType, UnionAll},1}:
 BigFloat
 Float16 
 Float32 
 Float64 

但有趣的是,Base中只有一个:

julia> subtypes(Base, AbstractFloat)
1-element Array{Union{DataType, UnionAll},1}:
 BigFloat

BTW,PlotRecipes.jl中有一个很好的方法可视化类型树: enter image description here

答案 1 :(得分:2)

您可以使用typeof和methodswith来帮助找到类似问题的答案:

julia> methodswith(typeof(AbstractFloat))
13-element Array{Method,1}:
 deserialize(s::AbstractSerializer, t::DataType) in Base.Serializer at     serialize.jl:1045
 dump(io::IO, x::DataType) in Base at show.jl:1304                                                       
 dump(io::IO, x::DataType, n::Int64, indent) in Base at show.jl:1209                                     
 eltype(t::DataType) in Base at array.jl:46                                                              
 fieldname(t::DataType, i::Integer) in Base at reflection.jl:120                                         
 fieldnames(t::DataType) in Base at reflection.jl:143                                                    
 fieldoffset(x::DataType, idx::Integer) in Base at reflection.jl:335                                     
 isbits(t::DataType) in Base at reflection.jl:233                                                        
 serialize(s::AbstractSerializer, t::DataType) in Base.Serializer at serialize.jl:538                    
 show(io::IO, x::DataType) in Base at show.jl:211                                                        
 subtypes(m::Module, x::Union{DataType, UnionAll}) in Base at reflection.jl:437                          
 subtypes(x::Union{DataType, UnionAll}) in Base at reflection.jl:460                                     
 supertype(T::DataType) in Base at operators.jl:41      

我是pythonista所以我将macro dir(a) :(methodswith(typeof($a))) end添加到~/.juliarc.jl中,现在我可以写:

julia> @dir AbstractFloat