首页 文章

抽象化scala中复杂模式匹配的复杂性

提问于
浏览
2

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

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

我只是对请求类型,url和有时身体感兴趣,所以我最好将模式匹配定义为 case Request(POST, "foo", body) 或类似 .

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"
    

相关问题