[SCALA] 왜 그 유형에 스칼라의 불변 인 Set 공변되지 않는 이유는 무엇입니까?
SCALA왜 그 유형에 스칼라의 불변 인 Set 공변되지 않는 이유는 무엇입니까?
편집 : 원래의 답변에 따라이 문제를 다시 작성
scala.collection.immutable.Set 클래스의 형식 매개 변수의 공변되지 않습니다. 왜 이런거야?
import scala.collection.immutable._
def foo(s: Set[CharSequence]): Unit = {
println(s)
}
def bar(): Unit = {
val s: Set[String] = Set("Hello", "World");
foo(s); //DOES NOT COMPILE, regardless of whether type is declared
//explicitly in the val s declaration
}
해결법
-
==============================
1.설정 때문에 함수로 설정 뒤에 개념의 그것의 유형 매개 변수에서 일정입니다. 다음 서명은 일을 조금 명확히해야한다 :
설정 때문에 함수로 설정 뒤에 개념의 그것의 유형 매개 변수에서 일정입니다. 다음 서명은 일을 조금 명확히해야한다 :
trait Set[A] extends (A=>Boolean) { def apply(e: A): Boolean }
세트가에 공변 된 경우, 적용 방법에 의한 기능의 contravariance에 A 형의 매개 변수를 사용 할 수 없을 것입니다. 설정은 잠재적으로 contravariant 수 있지만,이 같은 일을 할 때이 역시 문제가 발생 수 :
def elements: Iterable[A]
즉, 가장 좋은 방법은도 불변의 데이터 구조, 불변 일을 유지하는 것입니다. 당신은 immutable.Map는 형식 매개 변수 중 하나에 또한 불변임을 알 수 있습니다.
-
==============================
2.http://www.scala-lang.org/node/9764에서 마틴 오더 스키 글 :
http://www.scala-lang.org/node/9764에서 마틴 오더 스키 글 :
그래서, 우리의 노력의 모든이를위한 원칙 이유는 잘못 :-)했다 구축 할 것으로 보인다
-
==============================
3.편집 :이 대답은 약간 오프 토픽 보인다 사람이 왜 궁금 위해 I (질문자)이 질문을 수정 한 때문이입니다.
편집 :이 대답은 약간 오프 토픽 보인다 사람이 왜 궁금 위해 I (질문자)이 질문을 수정 한 때문이입니다.
스칼라의 타입 추론은 당신이 어떤 상황에서 CharSequences가 아닌 문자열을 원하는 것을 알아 내기에 충분하다. 2.7.3에서 나를 위해 특히, 다음 작품에서 :
import scala.collections.immutable._ def findCharSequences(): Set[CharSequence] = Set("Hello", "World")
직접 immutable.HashSets를 작성하는 방법에 관해서는 :하지 않습니다. 구현 최적화로서, 이하의 5 개 요소의 immutable.HashSets 실제로 immutable.HashSet의 인스턴스 수 없습니다. 그들은 하나 EmptySet, Set1과, Set2를, SET3, 또는 SET4 있습니다. 이러한 클래스는 immutable.Set 하위 클래스,하지만 immutable.HashSet 없습니다.
from https://stackoverflow.com/questions/676615/why-is-scalas-immutable-set-not-covariant-in-its-type by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 스파크에서 층화 추출법 (0) | 2019.10.30 |
---|---|
[SCALA] 튜플에 스칼라 목록을 변환? (0) | 2019.10.30 |
[SCALA] 어떻게 sc.textFile에서 로컬 파일을로드하는 대신 HDFS하기 (0) | 2019.10.30 |
[SCALA] 어떻게 스칼라에서 java.String.format를 사용 하는가? (0) | 2019.10.30 |
[SCALA] 스칼라 데프, 발, 및 VAR의 사용 (0) | 2019.10.30 |