例如,假设我为AbstractFloat
编写了一个函数,我想知道这个方法定义的影响,如何检查Base中AbstractFloat
的所有子类型?
答案 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中有一个很好的方法可视化类型树:
答案 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