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
的。