似乎朱莉娅的所有具体类型都是叶子类型,但反之则不然。例如,Type{Int64}
是叶子类型,但它不具体:
julia> Type{Int64}.abstract
true
julia> Type{Int64}.isleaftype
true
我的理解是,这是有道理的,因为没有类型为Type{Int64}
的值。类型Int64
具有具体类型DataType
。但是,因为Type{Int64}
没有重要的子类型,所以它被认为是叶子类型。
然而,isleaftype
的文档有点令人困惑:
isleaftype(T)
Determine whether T is a concrete type that can have instances, meaning its
only subtypes are itself and Union{} (but T itself is not Union{}).
Type{Int64}
不能有实例,所以第一句话表明它不是叶子类型。然而,确实它的唯一子类型本身就是Union{}
,所以第二句话表明它是。{/ p>
文档是否会混淆叶子类型和具体类型,如果是,那么哪个含义是正确的?
答案 0 :(得分:6)
你是对的;关于有实例的部分可能被添加,以更直观地了解这些类型,但不严格正确(如果实例定义为typeof(x) === T
)。
.abstract
字段是类型系列(Type
)的属性,它基本上告诉您该类型是否使用abstract
声明(而不是type
或{ {1}}或immutable
)。这只是告诉你一些家庭成员是否可以声明子类型,因此与叶子类型或具体类型没有直接关系。正如您所看到的那样,bitstype
是正确的,但另一个例子是Type{Int}.abstract
是假的,即使Complex.abstract
本身既不是叶也不具体,因为参数未指定