こういうSeqがあるとする。
val lis = Seq(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
これの先頭要素と、最後の要素、そしてどちらでもない中間の要素を取り出したい。
素朴にやると、headとlastとを使って、slice(1, lis.size)を使うことになるが、これをパターンマッチでやりたい。
実はScalaではルートのパッケージオブジェクトに+:と:+というextractorが定義されているので、以下のように書けるのだ:
lis match {
case head +: mid :+ last => s"head is $head, mid contains ${mid.size} elems, last is $last"
} // => "head is 1, mid contains 8 elems, last is 10"
さらに制約を加えたければifキーワードを使えばよい。
この情報はStackOverflowから得られた。便利なことだ。