Scala 某些[Seq[X]]不符合预期的类型选项[Seq[X]]

Scala 某些[Seq[X]]不符合预期的类型选项[Seq[X]],scala,Scala,我是Scala新手,遇到编译时错误: 类型为Some[Seq[String]]的表达式不符合预期的类型选项[Seq[String]] 这是代码中的一行 val enabledCipherSuites : Option[scala.collection.immutable.Seq[String]] = Some(Seq("TLS_RSA_WITH_AES_256_CBC_SHA")) 我查看了Option类的源代码,但不明白为什么序列中的某些部分不是sequence的Option 让我知道原因。

我是Scala新手,遇到编译时错误:

类型为Some[Seq[String]]的表达式不符合预期的类型选项[Seq[String]]

这是代码中的一行

val enabledCipherSuites : Option[scala.collection.immutable.Seq[String]] = Some(Seq("TLS_RSA_WITH_AES_256_CBC_SHA"))
我查看了Option类的源代码,但不明白为什么序列中的某些部分不是sequence的Option

让我知道原因。谢谢


编辑1:我需要明确指定我的序列是不可变的,这是因为您导入的默认
Seq
实际上是其他内容,即
scala.collection.Seq
。这是在标准导入集scala.Predef中定义的:

val enabledCipherSuites : Option[scala.collection.immutable.Seq[String]] = Some(Seq("TLS_RSA_WITH_AES_256_CBC_SHA"))
type Seq[+A] = scala.collection.Seq[A]
val Seq = scala.collection.Seq
现在,
选项的默认方差
将以另一种方式工作

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

这是因为
scala.collection.immutable.Seq
扩展了
scala.collection.Seq
,但显然不是相反。第一种情况之所以有效,是因为
选项
的类型参数是协变的,因此对于任何
B来说,这是因为您要导入的默认
Seq
实际上是其他内容,即
scala.collection.Seq
。这是在标准导入集scala.Predef中定义的:

type Seq[+A] = scala.collection.Seq[A]
val Seq = scala.collection.Seq
现在,
选项的默认方差
将以另一种方式工作

val enabledCipherSuites : Option[Seq[String]] = Some(scala.collection.immutable.Seq("TLS_RSA_WITH_AES_256_CBC_SHA"))
这是因为
scala.collection.immutable.Seq
扩展了
scala.collection.Seq
,但显然不是相反。第一种方案是可行的,因为
选项
的类型参数是协变的,所以您可以选择任何
B