複数のパラメーターのケースクラスとの照合に使用するエクストラクターを作成しようとしています。簡略化した例:
case class X(p1: String, p2: Int)
各エクストラクタオブジェクトにp1の固定値を定義してもらいたいのですが、p2は使用時に定義されます。(A、BなどをケースクラスおよびサブクラスXにすることはできません。また、ケースとしてX( 、)を使用したいと思います)applyメソッドの例:
object A {
def apply(p2: Int): X = X("A", p2)
}
object B {
def apply(p2: Int): X = X("B", p2)
}
...
パターンマッチングについては、次のように一致させたいと思います。
X("A", 2) match {
case A(2) => true // <- should match: p1="A" and p2=2
case A(_) => true // <- should match: p1="A" and p2=_
case X("A", _) => true // <- should match: p1="A" and p2=_
case A(1) => false // <- should not match
case B(2) => false // <- should not match: p1="B" and p2=2
}
、などでunapply
メソッドを定義する必要があることはわかっていますが、署名とロジックがどうあるべきか完全に混乱しています。A
B
object A {
def unapply(x: ???): Option[???] = {
???
}
}
助けてください?