Scala에서“view”는 무엇을합니까?
특히 여기서 문제 1을보고 있습니다.
http://pavelfatin.com/scala-for-project-euler/
나열된 코드는 다음과 같습니다.
val r = (1 until 1000).view.filter(n => n % 3 == 0 || n % 5 == 0).sum
나는 "보기"를 제외한 모든 것을 따를 수있다. 사실 내가보기를 꺼내도 코드는 여전히 똑같은 대답을 컴파일하고 생성합니다.
View는 지연 컬렉션을 생성하므로에 대한 호출 filter
은 컬렉션의 모든 요소를 평가하지 않습니다. 요소는 명시 적으로 액세스 된 후에 만 평가됩니다. 이제 sum
모든 요소에 액세스하지만를 view
호출 filter
하면 전체 벡터가 생성되지 않습니다. (Steve의 의견 참조)
보기 사용의 좋은 예는 다음과 같습니다.
scala> (1 to 1000000000).filter(_ % 2 == 0).take(10).toList
java.lang.OutOfMemoryError: GC overhead limit exceeded
여기서 Scala는 1000000000
처음 10 개에 액세스하기 위해 요소가 있는 컬렉션을 생성하려고합니다 .하지만 뷰는 다음과 같습니다.
scala> (1 to 1000000000).view.filter(_ % 2 == 0).take(10).toList
res2: List[Int] = List(2, 4, 6, 8, 10, 12, 14, 16, 18, 20)
저는 Scala에 대해 잘 모르지만 아마도이 페이지 가 도움 이 될 것입니다.
변압기를 구현하는 두 가지 주요 방법이 있습니다. 하나는 엄격합니다. 즉, 트랜스포머의 결과로 모든 요소가 구성된 새 컬렉션입니다. 다른 하나는 엄격하지 않거나 게으른 것입니다. 즉, 하나는 결과 컬렉션에 대한 프록시 만 구성하고 요소는 하나가 요구할 때만 구성됩니다.
보기는 일부 기본 컬렉션을 나타냅니다 모음의 특별한 종류이지만, 느리게 구현하는 모든 변압기.
따라서 코드가 없이도 작동하는 것처럼 들리지만 view
이론적으로 는 게으른 방식이 아니라 엄격하게 컬렉션의 모든 요소를 구성하는 추가 작업을 수행 할 수 있습니다 .
참고 URL : https://stackoverflow.com/questions/6799648/in-scala-what-does-view-do
'development' 카테고리의 다른 글
java.lang.NoClassDefFoundError : org / apache / commons / fileupload / FileItemFactory (0) | 2020.12.11 |
---|---|
테이블의 일부에 mysqldump를 사용하는 방법은 무엇입니까? (0) | 2020.12.11 |
Bash에서 파이프가 작동하는 방식에 대한 간단한 설명은 무엇입니까? (0) | 2020.12.11 |
Express의 URL에서 여러 매개 변수 사용 (0) | 2020.12.11 |
옥 템플릿에서 스타일 태그를 사용하는 방법은 무엇입니까? (0) | 2020.12.11 |