Scala 具有元组的非穷举模式匹配警告

Scala 具有元组的非穷举模式匹配警告,scala,Scala,给定以下特征: 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, (N

给定以下
特征

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
scala>valxs:(父(Seq[Int],Seq[Int])=(子(Nil,Nil))
xs:(父,(Seq[Int],Seq[Int])=(男孩,(List(),List())
scala>xs匹配{
|案例(男孩,(零,零))=>1
|案例(男孩,(ys,a::as))=>2
|案例(男孩,(ys,无))=>3
|案例(女孩,(无,无))=>4
|案例(女孩,(a::as,ys))=>5
|案例(女孩,(无,Y))=>6
| }
:15:警告:匹配可能不完整。
它将在以下输入上失败:(男孩,u),(女孩,u)
xs匹配{
^
res1:Int=1
我不明白这个用之不竭的比赛警告。男孩和女孩是什么意思


我不确定
(Seq[Int],Seq[Int])
怎么会有我右手边的匹配项以外的任何匹配项。

我不确定为什么,但似乎Scala在
未应用时遇到了问题(或者是
应用
)对于Seq,这是使模式匹配成为可能的魔法。显然,匹配中的
cons
Seq
的问题。如果您将xs更改为使用
列表
,它将起作用:

val xs: (Parent, (List[Int], List[Int])) = (Boy, (Nil, Nil))
编辑:

可能您可以使用
Seq
,但只需稍微不同地在构造上进行模式匹配,如下所示:

  xs match {
    case (Boy, (Nil, Nil)) => 1
    case (Boy, (_, Seq(x, _))) => 2
    case (Boy, (_, Nil)) => 3
    case (Girl, (Nil, Nil)) => 4
    case (Girl, (Seq(x, _), _)) => 5
    case (Girl, (Nil, _)) => 6
  }

这有意义吗?不是所有非空的
Seq
都是
的实例。我也喜欢这个答案-简短的回答:
列表的提取器。你需要
Seq
来提取
Seq
的。