2016-11-29 13 views
1

질문 1 클래스 - 스칼라 문서에서은에 이동하는 특성 또는

, 나는에 이동이 추상적 인 방법 foreach와 특성 것으로 나타났습니다 : 다음

http://www.scala-lang.org/docu/files/collections-api/collections.html

, 이유가 있었다 Traversable 유형의 객체를 인스턴스화합니까?

val t = Traversable(1,2,3) 

t.foreach(println _) //where is Scala picking foreach a definition from? 

질문 2 - 목록 또는 배열과 같은 다른 클래스에서 다른에 이동 방법? 그것은 서열, 설정 또는지도의 범주에 나오나요 (본인은 수집에 이동 상속 생각)

질문 3 - 나는 문서에 따라,의 Iterable는 추상적 인 방법에도 불구하고 Iterable 특성에 대한 동일 할 수 iterator :

val v1 = Iterator(1,2,3) 

v1.foreach(println _) 

무엇이 누락 되었습니까?

답변

5

질문 1 : Traversable(1,2,3)을 수행하면 Traversable 특성의 보조 개체에서 apply- 메서드가 실제로 호출됩니다. 이 메소드는 실제로 사용자가 제공 한 요소 (ListTraversable)로 List을 만듭니다. 따라서 전화하는 foreach 메서드는 실제로 foreach 메서드가 List입니다.

질문 2 : 예, Traversable은 스칼라의 모음 계층 구조 맨 위에있는 특성입니다. List과 은 콘크리트 컬렉션의 실제 예이고 Traversable은 많은 컬렉션이 구현하는 일반적인 특성입니다.

질문 3 : IterableIterator은 같은 것이 아닙니다. 당신은 질문에서 그들을 섞어 놓은 것처럼 보입니다. Iterable(1,2,3)Traversable(1,2,3)과 완전히 똑같습니다. 컴패니언 오브젝트 Iterableapply 메소드를 호출하고 List을 제공합니다. Iterator(1,2,3) 그러나 Iterator에서 apply 메서드를 호출하고 세 숫자를 반복하는 새로운 Iterator을 제공합니다.

+0

감사합니다. 컴패니언 개체를 만들 이유가 있습니까? Traversable 또는 Iterable 개체를 사용할 시나리오를 볼 수 없습니다. –

+0

동반자 개체에는 일반적으로 클래스의 일부 제작자가 포함됩니다. 컴패니언 개체는 항상 클래스와 동일한 파일에 정의되며 클래스와 동일한 이름을가집니다. 'Traversable '의 부속 개체에 대한 API 문서는 다음에서 볼 수 있습니다. http://www.scala-lang.org/api/2.12.0/scala/collection/Traversable$.html – marstran