Scala 为什么Unplyseq在模式匹配中涉及case类或tuple

Scala 为什么Unplyseq在模式匹配中涉及case类或tuple,scala,Scala,我有一个简单的代码,它将元素与长度为26的Seq进行匹配 test("Seq Pattern matching") { val x = 1 to 26 x match { case Seq(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z) => println(a) } } 它将调用Seq.unplyseq方法来解构Seq对象x,但我惊讶地

我有一个简单的代码,它将元素与长度为26的Seq进行匹配

  test("Seq Pattern matching") {
    val x = 1 to 26
    x match {
      case Seq(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z) => println(a)
    }
  }
它将调用
Seq.unplyseq
方法来解构Seq对象
x
,但我惊讶地发现代码导致编译错误:

Error:(82, 12) too many arguments for unapply pattern, maximum = 22
      case Seq(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z) => println(a) 
在Unplyseq方法中,它与case类或tuple没有任何关系,后者有22个字段

所以,我想问一下为什么会发生错误(为什么case类/元组字段限制会导致这个问题)


我正在使用Scala 2.11.8

我发现了
unplyseq
方法的基础是什么,它涉及元组

为了

(1比10)比赛{
案例顺序(a、b、c、d、e、f、g、h、i、j)=>(a、b、c);
案例=>(1,2,3);
}

比如:

scala.Predef.intWrapper(1).to(10) match {
  case scala.collection.Seq.unapplySeq[Int](<unapply-selector>) <unapply> ((a @ _), (b @ _), (c @ _), (d @ _), (e @ _), (f @ _), (g @ _), (h @ _), (i @ _), (j @ _)) => scala.Tuple3.apply[Int, Int, Int](a, b, c)
  case _ => scala.Tuple3.apply[Int, Int, Int](1, 2, 3)
}
scala.Predef.intWrapper(1.to(10)匹配{
case scala.collection.Seq.unaplyseq[Int]()((a)、(b)、(c)、(d)、(e)、(f)、(g)、(h)、(i)、(j)))=>scala.Tuple3.apply[Int,Int,Int](a,b,c)
case=>scala.Tuple3.apply[Int,Int,Int](1,2,3)
}

这可能会引起您的兴趣,并回答您的问题:感谢@Mik378的链接,它很好地解释了Scala 2.11中没有完全消除22限制,但我仍然不知道case cass/tuple在与Unallyseq进行模式匹配时涉及到什么