こういう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から得られた。便利なことだ。