代码之家  ›  专栏  ›  技术社区  ›  Consistency

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

  •  3
  • Consistency  · 技术社区  · 7 年前

    例如,假设我为 AbstractFloat ,我想知道此方法定义的影响,如何检查 抽象浮点 在基地?

    3 回复  |  直到 7 年前
        1
  •  7
  •   Gnimuc    7 年前

    你在找 subtypes :

    返回数据类型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
    

    顺便说一句,有一个很好的食谱 PlotRecipes.jl enter image description here

        2
  •  2
  •   Liso    7 年前

    您可以使用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      
    

    我是蟒蛇,所以我补充道 macro dir(a) :(methodswith(typeof($a))) end 进入 ~/.juliarc.jl 现在我可以写:

    julia> @dir AbstractFloat
    
        3
  •  0
  •   Alexander Rakhmaev    3 年前

    最近,需要从InteractiveUtils包连接此功能。 看见 SOF page 详细信息。