TreeSet.apply
메서드가 SortedSet
이고 TreeSet
이 아닌 개체가 반환되는 이유가 있습니까?왜 스칼라의 TreeSet이 SortedSet을 반환하는지
다음 코드는 apply()
가 SortedSet
에 정의되어 ++
의 측면에서 implemented이며, 그러므로 SortedSet
을 반환하기 때문에 문자 적 대답은 스칼라 2.7
val t:TreeSet[Int] = TreeSet(1,2,3)
TreeSet.apply
메서드가 SortedSet
이고 TreeSet
이 아닌 개체가 반환되는 이유가 있습니까?왜 스칼라의 TreeSet이 SortedSet을 반환하는지
다음 코드는 apply()
가 SortedSet
에 정의되어 ++
의 측면에서 implemented이며, 그러므로 SortedSet
을 반환하기 때문에 문자 적 대답은 스칼라 2.7
val t:TreeSet[Int] = TreeSet(1,2,3)
에 컴파일되지 않습니다. ++
은 +
으로 계속되며, 은 TreeSet
으로 정의되어 있기 때문에 중요하다면 TreeSet
으로 다시 캐스트 할 수 있습니다. (구현 방식에 따라 다르므로 시간이 지남에 따라 변경 될 수 있습니다.)
SortedSet에서 가져올 수없는 TreeSet에서 무엇이 필요합니까?
2.8에서 변경된 것처럼 보이지만 설계 결정의 근거가 무엇인지 확실하지 않습니다.
이것은 현재의 스칼라 수집 라이브러리의 짧은 시작으로 확인되었으며 scala 2.8에 포함 된 수정 된 수집 라이브러리에서 처리됩니다. 자세한 내용은 http://www.scala-lang.org/sid/3#을 참조하십시오.
나는'TreeSet'을 원하지 않을 것이고,'TreeSet'을 요구하지 않을 것인가? 'List (1,2,3)'는'Iterable'을 돌려 주어야합니까? 'SortedSet'의 주요 문제점은 엘레멘트를 제거 할 수없고 그 타입을'SortedSet'으로 유지할 수 없다는 것입니다. 실제로 여기에서 말한 것은 "예, 선생님입니다.";-)입니다. –
네, 확실히 유즈 케이스예요. 그리고 많은 메소드가 SortedSet에서 오버라이드되지 않는다는 것을 알지 못했습니다. 메일 링리스트에서 API 디자인에 대해 물어볼 가치가 있습니다. 그 동안 결과를 다운 캐스트하거나'TreeSet.empty'와'+'를 사용하여 설정을 빌드 할 수 있습니다 (이미 알고있는 것처럼). –