switch pattern for scala pattern-matching

pattern - scala for



Patrón coincidente con el símbolo `@` (2)

En cuanto a los comentarios para la respuesta anterior.

Considera esta clase de caso.

case class Employee(name: String, id: Int, technology: String)

al hacer la coincidencia de patrones.

case e @ Employee(_, _, "scala") => e.name // matching for employees with only scala technology ... it works case x: Employee => x.name // It also works case e: Employee(_, _, "scala") => e.name // matching for employees with only scala technology ... **wont''t work**

Dada esta clase de caso Person :

scala> case class Person(name: String, age: Int) {} defined class Person

... y esta instancia

scala> val b = Person("Kevin", 100) b: Person = Person(Kevin,100)

¿Hay alguna razón para preferir este código (con @ )

scala> b match { | case p @ Person(_, age) => println("age") | case _ => println("none") | } age

... sobre lo siguiente?

scala> b match { | case Person(_, age) => println("age") | case _ => println("none") | } age

Tal vez me estoy perdiendo el significado / poder de @ ?


Solo incluye @ cuando también desea tratar con el objeto en sí. Por lo tanto:

that match{ case p @ Person(_, age) if p != bill => age case Person(_, age) => age - 15 case _ => println("Not a person") }

De lo contrario, no tiene sentido incluirlo.