2017-05-20 3 views
0

내가 스칼라 새로운 오전과 내가 컴파일 타임 오류 얻을 다음에일부 [서열 [X] 예상 유형 옵션을 준수하지 않는 [서열 [X]

Expression of type Some[Seq[String]] does not conform to the expected type Option[Seq[String]]

이 선을 코드

val enabledCipherSuites : Option[scala.collection.immutable.Seq[String]] = Some(Seq("TLS_RSA_WITH_AES_256_CBC_SHA")) 

옵션 클래스 소스 코드를 살펴 보았지만 시퀀스의 일부가 시퀀스 옵션이 아닌 이유를 알 수 없습니다.

이유를 알려주세요. 감사합니다

편집 1 : 나는 명시 적으로 코드

답변

5

나중에 필요에 따라 내 순서는 불변이라고 지정해야합니다 이것은 당신이 가져 오는 기본이 Seq 뭔가 다른, 즉 scala.collection.Seq 사실이기 때문이다.

type Seq[+A] = scala.collection.Seq[A] 
val Seq = scala.collection.Seq 

지금 Option의 기본 분산이 주변의 다른 방식으로 작동합니다 : 이것은 scala.Predef에서 수입의 표준 세트를 정의한다.

val enabledCipherSuites : Option[Seq[String]] = Some(scala.collection.immutable.Seq("TLS_RSA_WITH_AES_256_CBC_SHA")) 

scala.collection.immutable.Seq 주위 분명히 다른 방법을하지 scala.collection.Seq 확장,하지만 때문이다. 첫 번째 시나리오는 Option이 유형 매개 변수에 공변 적이므로 어떤 B <: A에 대해서도 Option[B]Option[A]의 하위 유형입니다.

귀하의 사례는 반대로, immutable.Seq[A] <:< collection.Seq[A]이지만, Option[collection.Seq[A]]Option[immutable.Seq[A]]의 하위 유형이 될 것으로 예상됩니다. 이는 사실이 아니며, 그 반대 일뿐입니다.

분산과 결합 된 Predef import가 혼동의 원인입니다.