Julia中叶型的含义

Fen*_*ang 11 types julia

似乎朱莉娅的所有具体类型都是叶子类型,但反之则不然.例如,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{}这样,所以第二句话表明它是.

文档是否会混淆叶子类型和具体类型,如果是,那么哪个含义是正确的?

Jef*_*son 6

你是对的; 可能添加了关于具有实例的部分,以更直观地了解这些类型,但不严格正确(如果将实例定义为typeof(x) === T).

.abstract场是家庭类型(的属性Type),基本上告诉你类型是否与申报abstract(与typeimmutablebitstype).这只是告诉你一些家庭成员是否可以声明子类型,因此与叶子类型或具体类型没有直接关系.正如你所观察到的那样,这Type{Int}.abstract是正确的,但另一种方式的例子Complex.abstract是错误的,即使它Complex本身既不是叶子也不是具体的,因为参数是未指定的.