Achei esse recurso do Scala simples, mas muito útil, outro dia.
Se tivermos um Person</code> class like this...
case class Person(firstName : String, lastName : String)
… e queremos usar a correspondência de padrões para garantir que um objeto seja um Person</code> with lastName</code> "Jones" before send it to someFunction</code>, we could do something like this:
someObject match {
case Person(fn, "Jones") =>
someFunction(Person(fn, "Jones"))
}
Não é muito legal, certo? Como um todoPerson</code> object is of interest, we might do something like this instead...
case p : Person => someFunction(p)
Mas agora não temos mais nenhum padrão correspondente, a pessoa pode ter qualquer sobrenome! Então, como ligamos oPerson</code> object and keep our last name check? By using an alias!
case (p @ Person(_, "Jones")) => someFunction(p)
O objeto Person agora está vinculado ao val p</code> and can be passed on to someFunction</code>.