パターン マッチングを行う既存のコードに影響を与えないように、コンストラクター パラメーターをデフォルト値で追加したい既存のケース クラスがありますが、正しいアプローチがわかりません。
すなわち。私は持っている:
case class Foo(a: Int, b: Int)
def bar(n: Foo) = n match {
case Foo(1, 2) => true
case _ => false
}
ここで、追加のパラメーター c を Foo に追加する必要があるとします。すなわち。
case class Foo(a: Int, b: Int, c: Boolean = true)
既存のすべてのユース ケースで、パラメーターc
は true になるため、そのデフォルト値が設定されます。ただし、一部の新しいユース ケースでは、これに false を渡す必要があります。
そのため、別のパラメーターを追加して、デフォルト値を にするのが賢明なようですtrue
。しかし、これを行うとすぐに、パターン マッチbar
が構文エラーになります。= true
既存のコンストラクター呼び出しを変更する必要がないようにデフォルトを追加したため、これは間違っているようです。
これを行うにはどうすればよいでしょうか?古いパターン マッチを変更せずに残しますか?
更新: Foo の既存のインスタンス化をすべて書き直す必要もありません。@som-snytt は、別のパラメーターを として追加できることを指摘しましたFoo(a: Int, b: Int)(c: Boolean = true)
。これは、失敗などの既存の呼び出しを引き起こすことを除いて完璧ですFoo(1,2)
(それらは として書き換える必要がありますFoo(1,2)()
)。一部のユースケースにのみ新しいパラメーターを追加し、他の場所で機能するデフォルトを設定して書き換えを回避する方法を探しています。