Интересно, что экстрактор списка List.unapplySeq
не может извлечь SeqViewLike
объектов, поэтому вы получаете ошибку соответствия. Но с другой стороны Seq
может. Вы можете видеть это так:
scala> val seqView = List(1,2).view.sliding(2).next
seqView: scala.collection.SeqView[Int,List[Int]] = SeqViewC(...)
scala> val List(a, b, _*) = seqView
scala.MatchError: SeqViewC(...)
scala> val Seq(a, b, _*) = seqView
a: Int = 1
b: Int = 2
Таким образом, исправление вашей второй строки будет:
List(1,2,3,4).view.sliding(2).map({ case Seq(a, b) => a < b }).forall(identity)
// res: Boolean = true
Итак, проблема в том, что List(1,2,3,4).view
возвращает SeqView
.
Обратите внимание, что sliding
уже возвращает Iterator
, поэтому List (1,2,3,4) .sliding (2) ленив в этом смысле. Может быть view
не обязательно.