@_*
が可変引数リストと一致するとします。私はそれを次のように使用しようとしていますが、コードはコンパイルされていません。Scalaで@ _ *エクストラクタがコンパイルされない
val l= List(1,2,3,4,5)
l match {
case (first +: second +: [email protected]_*) => println("atleast 2 elements in the list")
}
@_*
が可変引数リストと一致するとします。私はそれを次のように使用しようとしていますが、コードはコンパイルされていません。Scalaで@ _ *エクストラクタがコンパイルされない
val l= List(1,2,3,4,5)
l match {
case (first +: second +: [email protected]_*) => println("atleast 2 elements in the list")
}
2つの可能な解決策。
が持っているあなたのList()
試合List()
:
case List(first, second, [email protected]_*) => . . .
またはmatchあなたList()
接続されている要素の配列に対する:
case first +: second +: rest => . . .
いずれかの方法で、second
は、第一に取り込まれます識別子first
とし、 2番目の値はリストから、rest
は残りの値を含みます。
ありがとうございました。リストはList(...)または(a + :(b +:Nil))の構文を使用して作成されるためですか? @ManuChadha; –
;はい、多かれ少なかれ。 'case'の後に' List() 'を構築できるパターンが続いた場合、' List'コンパニオンオブジェクトの 'unapplySeq()'メソッドが呼び出され、パターンマッチが完了します。 – jwvh
あなたの例では、 '@ _ *'を削除するだけで動作します。その使用方法については、こちらをご覧ください。https://stackoverflow.com/a/9229677/7579547 – Shaido