저는 스칼라에 익숙하지 않아 뷰 호출시 IndexedSeqViewS
및 이와 유사한 클래스의 인스턴스를 반환하는 이유를 이해하려고합니다. 왜 각 작업마다 다른 클래스가 필요합니까?스칼라 컬렉션 뷰 유형이 너무 많은 이유는 무엇입니까?
2
A
답변
3
각보기 변환 연산자 (즉, map
, filter
또는 slice
과 같은 새보기를 생성하는보기)는 기본 모음을 다른 방식으로 탐색하는보기를 만듭니다. IndexedSeqViewS
은 해당 컬렉션 클래스의 실제 이름이 아닙니다. toString
이 반환하는 것으로 가장 많이 사용되는 이름입니다.
예를 들어, Mapped
보기는 기본 모음의 각 요소가 어떤 방식으로 변환되도록 기본 모음의보기를 만듭니다.
이 다음과 같이 foreach
을 재정의가 필요합니다 컬렉션이 정의를 오버라이드 (override), 상속 기반 설계를 가지고 있기 때문에
trait Filtered extends Transformed[A] {
// ...
def foreach[U](f: A => U) {
for (x <- self)
if (pred(x)) f(x)
}
// ...
}
:
trait Mapped[B] extends Transformed[B] {
// ...
def foreach[U](f: B => U) {
for (x <- self)
f(mapping(x))
}
// ...
}
Filtered
보기를 통과하면서 일부 요소를 무시 필요 foreach
(및 apply
, size
등의 다른 방법)의 하위 클래스가 도입되어야합니다. 일부 대체 설계에서, 예를 들어. 하나는 타입 클립을 기반으로하므로 특정 유형에 대해 foreach
을 재정의하기 위해 별도의 typeclass를 도입해야 할 수 있습니다.
관련 문제
- 1. 초기화가 너무 많은 이유는 무엇입니까?
- 2. 스칼라. 너무 많은 작은 함수, 너무 많은 클래스?
- 3. 이유는 너무 많은 연결
- 4. 이유는 무엇입니까 dataframe.appy 비용 너무 많은 시간
- 5. perldoc에 너무 많은 ESC가있는 이유는 무엇입니까?
- 6. elementtree.ElementTree.iterparse가 너무 많은 메모리를 사용하는 이유는 무엇입니까?
- 7. 너무 많은 피쳐가 왜곡을 야기하는 이유는 무엇입니까?
- 8. JPA에 "너무 많은 연결"이있는 이유는 무엇입니까?
- 9. "노드 *"스칼라 유형이 아닌 스칼라 유형이 "노드"스칼라 유형으로 변환되었습니다.
- 10. 스칼라 foldLeft 너무 많은 매개 변수
- 11. 스칼라 함수로 너무 많은 시간이 걸리는 쿼리
- 12. 내 스칼라 메서드 유형이 List가 아닌 Buffer로 해석되는 이유는 무엇입니까?
- 13. 기본 PHP 조회수가 너무 많은 조회수를 계산하는 이유는 무엇입니까?
- 14. 컬렉션 뷰 컨트롤러의 셀 간격
- 15. CGRectIntersection에는 스칼라 유형이 필요합니까?
- 16. MFC에는 왜 많은 문자열 유형이 있습니까?
- 17. 필터의 스칼라 컬렉션 유형
- 18. 스칼라 미래의 가비지 컬렉션
- 19. 확장 스칼라 컬렉션
- 20. 스칼라 컬렉션 입력
- 21. 스칼라 컬렉션 순환 버퍼
- 22. JSF의 스칼라 컬렉션
- 23. 스칼라 컬렉션 CanBuildFrom
- 24. 스칼라 병렬 컬렉션
- 25. 너무 많은
- 26. 스칼라 컬렉션 : 많은 목록의 목록 또는 URL을 도메인별로 그룹화
- 27. 스칼라 2.9와 액터의 병렬 컬렉션
- 28. 스칼라 : 컬렉션 유형 매개 변수의 편리한 바인딩
- 29. 이유는 너무 많은 파일을 열 아파치?
- 30. 스칼라 목록에 크기 필드가없는 이유는 무엇입니까?
'Stream [T] '작업마다 별도의 클래스가 있습니까? –
아니요, 각 'Stream'작업에 대해 2 개의 클래스 만 있습니다. 빈 스트림과 스트림 단점이 있습니다. 그러나, 이러한 연산은 항상'Stream'을 반환하며, 모든 스트림은 동일한'foreach' 구현으로 통과합니다. '* View' 오퍼레이션은 콜렉션에 독립적입니다. 뷰 체인에서 기본 콜렉션 (foreach)의 순회는 이전에 호출 된 오퍼레이션에 따라 변경되고 다른 접근 자 오퍼레이션 (예 :'reduce', foreach' 또는'copyToArray')는 foreach로 구현됩니다. – axel22
모든 가능한 뷰 변환에 대한 모든 정보를 포함한다면 일회용 조작 패턴을 피할 수 있습니다. 즉 모든 가능한 변환을 구현하는 하나의 큰 'flatMapFilterGroupBySlice' 메소드로 모든 뷰 변환을 표현하십시오 정보. – axel22