Есть ли общий способ заставить SeqView перейти к Seq?
В Scala 2.12 SeqView расширяет Seq, так что вы можете оказаться в лени, когда кто-то захочет получить строгие коллекции.
Я былпытаюсь принудительно заставить SeqViews обращаться к Seqs, но сталкиваюсь с ошибками типов, с которыми я не знаком:
import scala.collection.SeqView
def force(xs: Seq[Int]): Seq[Int] = xs match {
case view: SeqView[_,_] => view.force
case other => other
}
force(List(1, 2, 3))
force(List(1, 2, 3).view)
Cannot construct a collection of type That with elements of type _ based on a collection of type _.
Scastie link: https://scastie.scala -lang.org / ThMW8jixT7Odet17EiDavA
Примечательно, что я могу предоставить параметры типа для соответствия, но, конечно, я получаю предупреждения об удалении типа
import scala.collection.SeqView
def force(xs: Seq[Int]): Seq[Int] = xs match {
case view: SeqView[Int, Seq[Int]] => view.force
case other => other
}
force(List(1, 2, 3))
force(List(1, 2, 3).view)
Предупреждение об удалении типа меня пугает, но, похоже, работает.
Кто-нибудь может пролить свет на это?