Я пытаюсь составить список (изменяемых и неизменяемых) множеств.Компилятор попадает в беду, так как он не может определить тип этого списка.Я всегда думал, что могу связывать списки любых типов и что тип нового списка является своего рода супертипом связанных списков.В следующем примере я определяю некоторые списки.Вы можете увидеть типы этих списков, заданных компилятором:
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]]
или это ошибка в компиляторе?
Большое спасибо за ваши ответы: -)