似乎朱莉娅的所有具体类型都是叶子类型,但反之则不然.例如,Type{Int64}是叶子类型,但它不具体:
julia> Type{Int64}.abstract
true
julia> Type{Int64}.isleaftype
true
Run Code Online (Sandbox Code Playgroud)
我的理解是,这是有道理的,因为没有类型的值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{}).
Run Code Online (Sandbox Code Playgroud)
Type{Int64}不能有实例,所以第一句话表明它不是叶子类型.然而,确实它的唯一亚型本身就是Union{}这样,所以第二句话表明它是.
文档是否会混淆叶子类型和具体类型,如果是,那么哪个含义是正确的?
你是对的; 可能添加了关于具有实例的部分,以更直观地了解这些类型,但不严格正确(如果将实例定义为typeof(x) === T).
该.abstract场是家庭类型(的属性Type),基本上告诉你类型是否与申报abstract(与type或immutable或bitstype).这只是告诉你一些家庭成员是否可以声明子类型,因此与叶子类型或具体类型没有直接关系.正如你所观察到的那样,这Type{Int}.abstract是正确的,但另一种方式的例子Complex.abstract是错误的,即使它Complex本身既不是叶子也不是具体的,因为参数是未指定的.
| 归档时间: |
|
| 查看次数: |
233 次 |
| 最近记录: |