development

Scala에서“view”는 무엇을합니까?

big-blog 2020. 12. 11. 19:05
반응형

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

반응형