Значение типа листа в 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{}
, поэтому второе предложение предполагает, что оно есть.
Является ли документация, объединяющая типы листов и конкретные типы, и если да, то какой смысл правильный?
Ответы
Ответ 1
Вы правы; вероятно, была добавлена часть о наличии экземпляров, чтобы дать более интуитивное представление о том, какие типы они есть, но не является строго правильным (если экземпляры определены как typeof(x) === T
).
Поле .abstract
является свойством семейства типов (Type
), которое в основном говорит вам, был ли тип объявлен с помощью abstract
(в отличие от Type
или immutable
или bitstype
). Это просто говорит вам, могут ли некоторые члены семьи объявить подтипы, и поэтому они напрямую не связаны с типом листа или конкретным типом. Как вы заметили, Type{Int}.abstract
является истинным, но пример, который идет другим путем, заключается в том, что Complex.abstract
является ложным, хотя Complex
сам по себе не является ни листом, ни конкретным, поскольку, поскольку параметр неуказан.