2014-09-23 3 views
1

는 사람이 구조 유형을 사용하여 반사를 사용하지의 런타임 성능 저하를 초래, 내가 이해에서유형 별칭은

x.sequence[({ type l[a] = ValidationNel[String, a] })#l, .... 

type VNel[+A] = ValidationNel[String, A] 
x.sequence[VNel, .... 

의 장점/단점을 설명 할 수 있습니다.

답변

3

유형 람다는 복합 유형을 인라인으로 표현하는 방법입니다.

유형 별명은 유형에 대한 식별자를 작성하는 방식입니다. 복잡한 유형이거나 type UserId = Int처럼 간단 할 수 있습니다. 복잡한 유형을 두 번 이상 필요로하거나 복잡한 서명을 부분적으로 분리하여 단순화하려는 경우에 유용합니다.

유형 람다 및 유형 별칭은 구조 유형 지정이 아닙니다. 오히려 유형을 표현하는 방법입니다. 형 람다에 대한 자세한 내용은

: https://stackoverflow.com/a/8737611/547564

+4

특히 유형 λ의 구조 유형을 사용하면 런타임시 구조 유형의 구성원에 액세스 할 때와 달리 런타임 비용이 들지 않습니다. – mpilquist

1

그들은 거의 동일합니다 - 당신이 명확하게 찾을 중 사용. 형식 별칭은 일반적으로 더 읽기 쉽습니다. 확장 될 수 있도록 작성된 특성 (또는 클래스)의 맥락에서 람다 형식은 형식을 재정의하는 것을 방지하므로 명확해질 수 있지만 이는 대단히 중요한 사례입니다.

일반 코드에서 구조 유형에 정의 된 값에 액세스하면 실제로 리플렉션 사용 비용이 부과됩니다. 그러나 유형 람다에서는 구조 유형이 런타임에 지워지는 일반 유형 매개 변수로만 사용됩니다. 따라서 런타임 성능에 미치는 영향은 없습니다.

람다 유형을 광범위하게 사용하는 경우 더 편리한 구문을 제공하는 종류 프로젝터 플러그인을 고려할 수 있습니다 (구조 유형과 시각적으로 유사 함을 피할 수 있음).

관련 문제