次のように、同じ値がすべての場所に存在する場合にのみ一致するように、1 つのパターン内で単一の変数を複数回使用できるようにしたいと考えています。
list match {
case x :: x :: xs => // recurse
}
一致しますが、一致List(1,1,2)
しませんList(1,2,1)
。しかし、これは でコンパイルできませんerror: x is already defined as value x
。
この質問を調査したところ、case 句にガードを含めることもできることがわかりました。
list match {
case x1 :: x2 :: xs if x1==x2 => // recurse
}
これは同じように機能するようです(そうですよね?)。これは良いことですが、多くの場所で同じ値が必要な場合は、きれいに見えません。
list match {
case x1::x2::x3::x4::xs if x1==x2 && x2==x3 && x3==x4 => // recurse
}
これを行うことができるよりエレガントな方法はありますか?
いくつかのメモ: はい、私はちょうど scala を学んでいます。その点で、私は完全に異なる解決策、または何かを実際に探しているわけではありませんが、特にパターン マッチングに関心があります。takeWhile
filter