2

(比較的) 複雑なケース クラスに対して多くのパターン マッチングを行っている場合、ほとんどの場合、そのフィールドの 1 つまたは 2 つだけに関心があります。他のフィールドを抽象化する方法はありますか (おそらくクラスをラップすることによって?)? 単純化しようとしているタイプの例を次に示します。

def receive = {
  case HttpRequest(POST, "foo", _, HttpBody(_, body), _) => // action
  case HttpRequest(GET, "bar", _, _, _) => // action
}

私はリクエスト タイプ、URL、および場合によっては本文だけに本当に関心があるので、理想的にはパターン マッチを ascase Request(POST, "foo", body)または類似のものとして定義したいと考えています。

4

1 に答える 1

7

独自のRequest抽出器を作成するだけです。簡単な例を次に示します。

case class Complex(a: String, b: Int, c: String)
object Simple { 
  def unapply(c: Complex): Option[(String, Int)] = Some(c.a, c.b) 
}

Complex("B", 2, "x") match {
  case Simple("A", i) => println("found A, " + i)
  case Simple("B", i) => println("found B, " + i)
}

// prints "found B, 2"
于 2012-11-12T01:29:23.120 に答える