case Seq(Seq(a, b), Seq(c, d), _*) => true
我有一种解决方法,可以使用
{{1}}
谁能解释为什么第一个不起作用?
答案 0 :(得分:4)
您使用了错误的提取器! :+
暗示第一部分是(外部)序列的一部分,因此a
和b
的类型为Seq[String]
而不是String
,而第二部分部分Seq(c,d)
和tail
被视为元素,因此c
和d
实际上是String
。
通常不会进行类型检查,但是在元素类型为Seq
的情况下会进行类型检查。但是,如果您假设a
和b
是String
,并尝试将其视为此类,则类型检查器可能会抱怨,从而引起更多的混乱。
正确的提取器为+:
。冒号位于序列的一侧,加号位于元素的一侧。因此
case Seq(a, b) +: Seq(c, d) +: tail => true
符合预期。