Julia中叶型的含义

时间:2016-07-25 00:15:52

标签: types julia

似乎朱莉娅的所有具体类型都是叶子类型,但反之则不然。例如,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>

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

1 个答案:

答案 0 :(得分:6)

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

.abstract字段是类型系列(Type)的属性,它基本上告诉您该类型是否使用abstract声明(而不是type或{ {1}}或immutable)。这只是告诉你一些家庭成员是否可以声明子类型,因此与叶子类型或具体类型没有直接关系。正如您所看到的那样,bitstype是正确的,但另一个例子是Type{Int}.abstract是假的,即使Complex.abstract本身既不是叶也不具体,因为参数未指定