Aliases na correspondência de padrões Scala

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>.