Я озадачен, почему не могу получить коллекцию из следующей строки кода Scala:
val pairs = for( v <- vc; o <- oc) yield (v,o)
Внутри этой функции, которая использует неизменяемые векторы.
private def recMergeVirtualAndReal(mCell: RCell, vc: Vector[Cell], oc: Vector[Cell]): Vector[Cell] = {
var temp_oc = oc
val pairs = for( v <- vc; o <- oc) yield (v,o)
val newVCells =
for((left, right) <- pairs if left contains right) yield {
temp_oc = temp_oc.filterNot(o => o == left || o == right)
captureVCells(left,right,mCell)
}
if(newVCells.nonEmpty) recMergeVirtualAndReal(mCell, recMergeVirtualCells(newVCells ++ vc), temp_oc)
else vc
}
Я получаю следующую ошибку в трассировке стека:
Exception in thread "main" java.lang.ClassCastException: scala.collection.immutable.Vector cannot be cast to game.Cell
at model.Board$$anonfun$10.apply(Board.scala:223)
at scala.collection.immutable.List.flatMap(List.scala:327)
Я запутался, потому что я не пытаюсь ничего приводить, это просто простое утверждение без каких-либо преобразований типов.
Я такжепопробовал это в случае, если компилятор не мог понять типы:
val pairs = for( v: Cell <- vc: Vector[Cell]; o: Cell <- oc: Vector[Cell]) yield (v: Cell,o: Cell)