Scala pattern matching referencing

陌路散爱 提交于 2019-12-05 19:23:39

Do this

v match {
   case a @ A(x) =>
   doSomething(a)
}

@ is called Pattern Binder (Refer § 8.1.3). From the reference:

A pattern binder x@p consists of a pattern variable x and a pattern p. The type of the variable x is the static type T of the pattern p. This pattern matches any value v matched by the pattern p, provided the run-time type of v is also an instance of T , and it binds the variable name to that value.

v match {
  a @ case A(x) =>
    doSomething(a)
}

By the way, you don't need the semicolon.

Case classes are deconstructed

You wouldn't refer to A, as you would refer to the deconstructed object, hence you would only get access to x in the context of your case.

However, you would know that the context was A, since you matched the case, so it would be easy to construct a new case class from your arguments.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!