15
私は(変更可能で不変の)セットのリストを作成しようとしています。コンパイラは、そのリストの型を理解できないので、問題に陥る。私はいつもどんなタイプのリストにも接続できると思っていました。新しいリストのタイプは、接続されたリストのスーパータイプの一種です。次の例では、いくつかのリストを定義します。あなたは、コンパイラによって与えられ、これらのリストの種類を見ることができます:スカラーの(不変かつ変更可能な)セットのリストを取得するには?
val intList = List(1) //List[Int]
val stringList = List("ab") //List[java.lang.String]
val mSetList = List(mutable.Set(1, 2, 3)) //List[scala.collection.mutable.Set[Int]]
val iSetList = List(immutable.Set(1, 2, 3)) //List[scala.collection.immutable.Set[Int]]
は今、私はこれらのリストを接続するための:::
演算子を使用します。
val intStringList = intList:::stringList //List[Any]
val intMSetList = intList:::mSetList //List[Any]
val intISetList = intList:::iSetList //List[Any]
期待、コンパイラが共通のスーパータイプを計算したよう(List[Any]
)の両方のリストの。
val iSetmSetList = iSetList:::mSetList //type error
をしかし、私は明示的にそれが動作する、二つのリストを「キャスト」場合:しかし、次はコンパイルされません
私はそれの正しい種類を取得するには、コンパイラを手助けしなければならないのはなぜ
val setList1 : List[scala.collection.Set[Int]] = mSetList //List[scala.collection.Set[Int]]
val setList2 : List[scala.collection.Set[Int]] = iSetList // List[scala.collection.Set[Int]]
val setList = setList1:::setList2 //List[scala.collection.Set[Int]]
リスト?そして、単にそれを単にList[Any]
と入力するのではなく、エラーが発生するのはなぜですか?理論的にはタイプList[scala.collection.Set[Int]]
を計算することは不可能ですか、それともコンパイラの一種のバグですか?
おかげで
:// stackoverflowの。 com/questions/5734755/scala-type-widening-of-foott-ttはhttps://issues.scala-lang.org/browse/SI-4501で修正されました。 6/25よりも夜間に挑戦しようとする価値がありますか? – huynhjl