2017-05-20 10 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")) 

私はOptionクラスのソースコードを調べましたが、なぜシーケンスの一部がシーケンスのオプションではないのか分かりません。

理由を教えてください。おかげ

編集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[immutable.Seq[A]]のサブタイプになると予想していますが、これは真ではなく、その逆のみが真です。

ここで混乱する理由は、分散と組み合わせたPredefインポートです。

関連する問題