朱莉婭的所有具體類型似乎都是葉型,但事實並非如此。例如,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}
沒有實例,所以第一句表明,它不是葉型。然而,它確實是唯一的亞型本身,因此第二句話就表明它是。
文檔是否將葉子類型和具體類型相混淆,如果是,哪些含義是正確的?
好問題。只是爲了澄清一點:儘管(1)typeof(x)== Type {Int}沒有'x',那麼(2)'x :: Type {Int}'(即'x == Int')。 (1)是否定義了一個「實例」/「具體類型」對? 'Type'確實有子類型:'DataType','TypeConstructor'和'TypeUnion'。同樣,'DataType :: Type'和'Type :: DataType'都是有效的 - 將值視爲值會導致各種怪異。 –
這並不簡單。這裏有一個相關的討論:https://github.com/JuliaLang/julia/issues/17086 – DNF