2

如果我对(相对)复杂的案例类进行大量模式匹配,但大多数时候我只对其中的一两个字段感兴趣。有没有办法抽象出其他领域(也许通过包装类?)?这是我试图简化的事物类型的示例:

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

我只对请求类型、url 和有时是 body 真正感兴趣,所以我理想情况下希望将模式匹配定义为case 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 回答