Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scala中复杂模式匹配的复杂性抽象_Scala_Pattern Matching - Fatal编程技术网

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

scala中复杂模式匹配的复杂性抽象,scala,pattern-matching,Scala,Pattern Matching,如果我对一个(相对)复杂的case类进行大量的模式匹配,但大多数时候我只对它的一个或两个字段感兴趣。有没有一种方法可以抽象出其他字段(可能是通过包装类?)?下面是我试图简化的一个例子: def receive = { case HttpRequest(POST, "foo", _, HttpBody(_, body), _) => // action case HttpRequest(GET, "bar", _, _, _) => // action } 我只对请求类型、u

如果我对一个(相对)复杂的case类进行大量的模式匹配,但大多数时候我只对它的一个或两个字段感兴趣。有没有一种方法可以抽象出其他字段(可能是通过包装类?)?下面是我试图简化的一个例子:

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

我只对请求类型、url和有时的正文感兴趣,所以我理想地将模式匹配定义为
case-request(POST,“foo”,body)
或类似

只需提出自己的
请求
提取器即可。下面是一个简化的示例:

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"
有。