【发布时间】:2016-07-25 00:15:51
【问题描述】:
似乎 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{},所以第二句话暗示它是。
文档是否将叶类型和具体类型混为一谈,如果是,哪种含义是正确的?
【问题讨论】:
-
好问题。只是为了澄清一点:虽然没有
x用于哪个(1)typeof(x) == Type{Int},但有哪个(2)x::Type{Int}(即x == Int)。 (1) 是否定义了“实例”/“具体类型”对?Type确实有子类型:DataType、TypeConstructor和TypeUnion。此外,DataType::Type和Type::DataType都是有效的 - 将类型视为值会导致各种怪异。 -
这并不简单。这里有相关讨论:github.com/JuliaLang/julia/issues/17086