Scala模式匹配引用

use*_*248 3 scala pattern-matching

当模式匹配案例类时,你如何实际引用它匹配的类?

这是一个展示我的意思的例子:

sealed trait Value
case class A(n: Int) extends Value

v match {
  case A(x) =>
   doSomething(A);
}
Run Code Online (Sandbox Code Playgroud)

v类型值在哪里并且采用类型doSomething的参数A,而不是Value.

Jat*_*tin 10

做这个

v match {
   case a @ A(x) =>
   doSomething(a)
}
Run Code Online (Sandbox Code Playgroud)

@被称为Pattern Binder(参见§8.1.3).来自参考:

图案装订器x @ p由图案变量x和图案p组成.变量x的类型是模式p的静态类型T. 此模式匹配模式p匹配的任何值v,前提是v的运行时类型也是T的实例,并且它将变量名称绑定到该值.