После прочтения этого сообщения о том, как использовать сопоставление шаблонов в Vector
(или любой коллекции, реализующей Seq
), я проверил соответствие шаблонов в этой коллекции.
scala> x // Vector
res38: scala.collection.immutable.Vector[Int] = Vector(1, 2, 3)
scala> x match {
| case y +: ys => println("y: " + "ys: " + ys)
| case Nil => println("empty vector")
| }
<console>:12: error: pattern type is incompatible with expected type;
found : scala.collection.immutable.Nil.type
required: scala.collection.immutable.Vector[Int]
Note: if you intended to match against the class, try `case _: <none>`
case Nil => println("empty vector")
^
Здесь dhg
ответ, который объясняет +:
:
object +: {
def unapply[T](s: Seq[T]) =
s.headOption.map(head => (head, s.tail))
}
REPL
показывает мне, что
scala> Vector[Int]() == Nil
res37: Boolean = true
... так почему я не могу использовать этот оператор case Nil
для Vector
?