Rus*_*ell 2 scala pattern-matching
如果我正在针对(相对)复杂的案例类进行大量模式匹配,但大多数时候我只对其中的一个或两个字段感兴趣.有没有办法抽象掉其他字段(也许是通过包装类?)?这是我正在尝试简化的事物类型的示例:
def receive = {
case HttpRequest(POST, "foo", _, HttpBody(_, body), _) => // action
case HttpRequest(GET, "bar", _, _, _) => // action
}
Run Code Online (Sandbox Code Playgroud)
我只是对请求类型,url和有时身体感兴趣,所以我最好将模式匹配定义为case Request(POST, "foo", body)或类似.
只需制作自己的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"
Run Code Online (Sandbox Code Playgroud)