Учитывая следующие sealed trait
:Неполный Pattern Match Предупреждение с Кортежем
scala> sealed trait Parent
defined trait Parent
scala> case object Boy extends Parent
defined object Boy
scala> case object Girl extends Parent
defined object Girl
И дал xs
:
scala> val xs: (Parent, (Seq[Int], Seq[Int])) = (Boy, (Nil, Nil))
xs: (Parent, (Seq[Int], Seq[Int])) = (Boy,(List(),List()))
scala> xs match {
| case (Boy, (Nil, Nil)) => 1
| case (Boy, (ys, a :: as)) => 2
| case (Boy, (ys, Nil)) => 3
| case (Girl, (Nil, Nil)) => 4
| case (Girl, (a :: as, ys)) => 5
| case (Girl, (Nil, ys)) => 6
| }
<console>:15: warning: match may not be exhaustive.
It would fail on the following inputs: (Boy, _), (Girl, _)
xs match {
^
res1: Int = 1
Я не понимаю, это неисчерпаемое предупреждения матча. Что делать (Boy, _)
и (Girl, _)
означает?
Я не уверен, что у (Seq[Int], Seq[Int])
может быть любой другой матч, чем у меня с правой стороны.
Короткий ответ: '::' является экстрактором для 'List'. Вам нужно 'Seq' для извлечения' Seq 's. –