密閉ケースクラス宣言内でガード条件とパターンマッチングを組み合わせることは可能ですか?Scala:密封されたケースクラス宣言の中でガード条件とパターンマッチを組み合わせることはできますか
マッチブロック内にガード条件を含めることは可能ですが、この条件を密封されたケースクラスの前に定義することは有益でしょう。 これにより、開発者はパターンマッチングの際にコンパイラがチェックする可能な入力の厳密なセットを定義できます。
だから、要約すると、私はこのようなものと同等のものを行うことができるようにしたい:
// create a set of pattern matchable cases with guards built in
sealed abstract class Args
case class ValidArgs1(arg1:Int,arg2:Int) if arg1>1 && arg2<10 extends Args
case class ValidArgs2(arg1:Int,arg2:Int) if arg1>5 && arg2<6 extends Args
case class InvalidArgs(arg1:Int,arg2:Int) if arg1<=1 && arg2>=10 extends Args
// the aim of this is to achieve pattern matching against an exhaustive set of
// pre-defined possibilities
def process(args:Args){
args match
{
case ValidArgs1 = > // do this
case ValidArgs2= > // do this
case InvalidArgs = > // do this
}
}
提案された機能には、既にスケーラがもう必要ありません。これは単なる構文砂糖です。 – ayvango
@ayvango Scalaは静的検証をサポートしていません。あなたは何を意味するのですか、なぜダウンボートですか? –
トピックスターターは静的検証を必要としません。彼はちょうど提供されたヒントでunapplyメソッドを拡張したい。 – ayvango