2016-07-25 2 views
11

줄리아의 모든 구체적인 유형은 리프 유형이지만, 그 반대는 사실이 아닌 것으로 보입니다. 예를 들어, Type{Int64}는 잎 유형이지만 구체적인되지 않습니다 : 유형 Type{Int64}이 더 값이 없기 때문에Julia의 리프 유형 의미

julia> Type{Int64}.abstract 
true 

julia> Type{Int64}.isleaftype 
true 

나의 이해는,이 의미가 있다는 것입니다. Int64 유형은 구체적인 유형이 DataType입니다. 그러나 Type{Int64}에는 중요한 하위 형식이 없기 때문에 리프 유형으로 간주됩니다. 인스턴스를 가질 수 없습니다

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}, 그래서 첫 번째 문장은 잎의 유형이 아닌 것을 제안 :

그러나 isleaftype의 문서는 약간 혼란 스럽다. 그러나 그 유일한 하위 유형은 자체이고 Union{}이기 때문에 사실입니다. 따라서 두 번째 문장은 그것이 그렇다는 것을 나타냅니다.

설명서가 리프 유형과 구체적인 유형을 섞어 쓰고 있습니까? 그렇다면 어떤 의미가 맞습니까?

+0

좋은 질문입니다. 한 점을 분명히하기 위해서 : (1)'typeof (x) == Type {Int}'에 대해'x'가 없지만'x :: Type {Int}'(즉'x == Int'). (1) "인스턴스"/ "구체적인 유형"쌍을 정의합니까? 'Type'은'DataType','TypeConstructor' 및'TypeUnion' 하위 유형을 가지고 있습니다. 또한,'DataType :: Type'과'Type :: DataType' 둘 다 유효합니다. 유형을 값으로 처리하면 모든 종류의 이상 함이 생깁니다. –

+2

간단하지 않습니다. 여기에 관련 토론이 있습니다 : https://github.com/JuliaLang/julia/issues/17086 – DNF

답변

6

네가 맞아. 인스턴스가있는 부분은 아마도 어떤 유형인지에 대해보다 직관적 인 의미를 부여하기 위해 추가되었지만 엄격하게 (인스턴스가 typeof(x) === T으로 정의 된 경우) 정확하지는 않습니다.

.abstract 필드는 기본적으로 (type 또는 immutable 또는 bitstype 반대) 유형이 abstract로 선언되었는지 여부를 알려줍니다 유형의 가족 (Type)의 속성입니다. 이것은 단지 가족 중 일부 구성원이 하위 유형을 선언 할 수 있는지 여부를 알려주므로 리프 유형 또는 구체적 유형과 직접 관련되지 않습니다. 비록이 참이지만 그 반대의 예는 자체가 잎이 아니거나 콘크리트가 아니더라도 매개 변수가 지정되지 않았기 때문에 Complex.abstract이 거짓이라는 것입니다.