2016-07-25 21 views
11

Görünüşe göre Julia'daki tüm beton türleri yaprak türleridir, ancak tersi doğru değildir. Örneğin, Type{Int64} bir yaprak tipi ama somut değildir: tip Type{Int64} sahip hiçbir değer olduğundanJulia cinsinden yaprak türünün anlamı

julia> Type{Int64}.abstract 
true 

julia> Type{Int64}.isleaftype 
true 

Benim anlayış, bu mantıklı olmasıdır. Int64 tipi, DataType beton tipine sahiptir. Bununla birlikte, Type{Int64}'un hiçbir önemli alt türü bulunmadığından, bir yaprak türü olarak kabul edilir. örneklerini olamaz

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}, bu yüzden ilk cümle bir yaprak tipi olmadığını göstermektedir:

Ancak isleaftype dokümantasyonu biraz kafa karıştırıcı. Ancak, tek alt türünün kendisi ve Union{} olduğu doğrudur, bu yüzden ikinci cümle bunun olduğunu gösterir.

Yaprak tipleri ve beton türleri ile ilgili belgelerle belgeleniyor mu?

+0

İyi soru. Sadece bir noktayı açıklığa kavuşturmak için: (x) = (Tür) tipinin (x) == Type {Int} 'türünde 'x' (x) 'inin (x)' inin (Int)' (yani x'in) olduğu bir x değil. == Int'). (1) bir "örnek"/"beton tipi" çifti tanımlar mı? 'Type' alt türlerine sahiptir:' DataType', 'TypeConstructor' ve' TypeUnion'. Ayrıca, her iki 'DataType :: Type' ve' Type :: DataType' da geçerlidir - türleri her çeşit tuhaflığa yol açan değer olarak ele alır. –

+2

Bu kolay değildir. Burada ilgili bir tartışma var: https://github.com/JuliaLang/julia/issues/17086 – DNF

cevap

6

Haklısınız; Örneklerin olmasıyla ilgili kısım muhtemelen, bu türlerin daha sezgisel bir anlayışını vermek için eklenmiştir, ancak tam olarak doğru değildir (eğer örnekler varsa typeof(x) === T olarak tanımlanmıştır).

.abstract alan temelde (type veya immutable veya bitstype aksine) tip abstract ile ilan edildi olmadığını söyler tipi ailesi (Type) bir özelliktir. Bu sadece ailenin bazı üyelerinin alt tipler beyan edip edemeyeceğini ve bu yüzden doğrudan bir yaprak tipi veya beton türü ile ilgili olmadığını söyler. Siz gözlemledikçe, Type{Int}.abstract doğrudur, ancak diğer yöne giden bir örnek, Complex tek başına, parametre belirtilmemiş olduğundan, ne yaprak ne de beton olsa bile, Complex.abstract yanlıştır.