2011-02-13 5 views
4

보다 일반적인 방법으로 ArrayBuffer 및 Vector를 어떻게 참조 할 수 있습니까?Scala에서 "list"를 참조하는 일반적인 방법은 무엇입니까?

예를 들어, 내 함수 중 하나는 Vector를 인수로 받고 다른 함수는 ArrayBuffer를 반환합니다. 내가 사용할 수있는 일반적인 "iterface"는 무엇입니까?

예를 들어 자바에서는 리스트 또는 콜렉션 인터페이스를 사용할 수 있습니다.

+1

http://stackoverflow.com/questions/1722137/scala-2-8-collections-design-tutorial/1724807도 참조하십시오. –

답변

9

컬렉션 클래스 간의 상속 관계에 대한 개요는 here을 참조하십시오.

IndexedSeq은 ArrayBuffer와 Vector의 공통된 특징입니다.

편집 : IndexedSeq 서열 대 다음 문서에서

:이 구현은 어떤 경우에 ArrayBuffer 및 벡터에 의해 제공 될 것이다 이러한 맥락에서, 당신은 단지뿐만 아니라, 서열을 사용할 수 있다는 것을 의미 Indexed sequences do not add any new methods wrt Seq, but promise efficient implementations of random access patterns..

+0

왜 "Seq"가 아닌가? 나는 어떻게 결정합니까? 자바에서는 선택의 수가 제한되어있었습니다 ... – drozzy

+0

아아, 무제한 선택의 저주 ... 문서에서 :'인덱스 된 시퀀스는 새로운 메소드를 추가하지 않지만 임의 액세스 패턴의 효율적인 구현을 약속합니다 .' 즉,이 컨텍스트에서는 Seq를 사용할 수 있습니다. 어떤 경우에도 ArrayBuffer 및 Vector에 의해 구현이 제공되기 때문입니다. –

+0

이 의견으로 답을 수정하여 동의 할 수 있습니까? 감사 – drozzy

3

나는 Map에도 적용될 SeqLike 이상의 일반 TraversableOnce을 사용할 것입니다.

+4

Traversable 또는 Seq를 사용하지 않는 이유는 무엇입니까? – gruenewa

+0

맞습니다. Vector와 ArrayBuffer (+1)에 충분합니다. –

+2

'SeqLike'는이 경우별로 유용하지 않습니다. 실제로는 형식 매개 변수로서의 실제 표현을 갖기 때문입니다. 'Seq'는 관용적 인 선택이며, Traversable보다 덜 제한적이며 Traversable의 것보다 더 좋은 성능을내는 몇몇 메소드의 구현을 가지고 있습니다. –

관련 문제