没有Seq [Seq [T]]的模式匹配

时间:2018-12-28 07:12:02

标签: scala pattern-matching seq extractor

case Seq(Seq(a, b), Seq(c, d), _*) => true

我有一种解决方法,可以使用

{{1}}

谁能解释为什么第一个不起作用?

1 个答案:

答案 0 :(得分:4)

您使用了错误的提取器! :+暗示第一部分是(外部)序列的一部分,因此ab的类型为Seq[String]而不是String,而第二部分部分Seq(c,d)tail被视为元素,因此cd实际上是String

通常不会进行类型检查,但是在元素类型为Seq的情况下会进行类型检查。但是,如果您假设abString,并尝试将其视为此类,则类型检查器可能会抱怨,从而引起更多的混乱。

正确的提取器为+:。冒号位于序列的一侧,加号位于元素的一侧。因此

  case Seq(a, b) +: Seq(c, d) +: tail => true

符合预期。