Types 叶型在《朱莉娅》中的意义

Types 叶型在《朱莉娅》中的意义,types,julia,Types,Julia,Julia中的所有具体类型似乎都是叶子类型,但事实并非如此。例如,Type{Int64}是叶子类型,但它不是具体的: julia> Type{Int64}.abstract true julia> Type{Int64}.isleaftype true 我的理解是这是有意义的,因为没有类型为type{Int64}的值。类型Int64具有具体类型DataType。但是,由于类型{Int64}没有非平凡的子类型,因此它被视为叶类型 但是,isleaftype的文档有点混乱: is

Julia中的所有具体类型似乎都是叶子类型,但事实并非如此。例如,
Type{Int64}
是叶子类型,但它不是具体的:

julia> Type{Int64}.abstract
true

julia> Type{Int64}.isleaftype
true
我的理解是这是有意义的,因为没有类型为
type{Int64}
的值。类型
Int64
具有具体类型
DataType
。但是,由于
类型{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{}
,因此第二句话表明它是


文档是否将叶类型和具体类型混为一谈,如果是,那么哪个意思是正确的?

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


.abstract
字段是类型族(
类型
)的一个属性,它基本上告诉您类型是用
abstract
声明的(与
类型
不可变
位类型
相反)。这只是告诉您族的某些成员是否可以声明子类型,因此与叶类型或具体类型没有直接关系。正如您所观察到的,
Type{Int}.abstract
是正确的,但另一个例子是
Complex.abstract
是错误的,尽管
Complex
本身既不是叶子也不是具体的,因为参数未指定。

问得好。只是想澄清一点:虽然没有(1)
typeof(x)=Type{Int}
x
,但有(2)
x::Type{Int}
(即
x==Int
)。(1)是否定义了“实例”/“具体类型”对<代码>类型确实有子类型:
数据类型
类型构造函数
类型联合
。而且,
DataType::Type
Type::DataType
都是有效的——将类型视为值会导致各种各样的奇怪。这并不简单。这里有一个相关的讨论: