このPerson
ケースクラスがある場合:
scala> case class Person(name: String, age: Int) {}
defined class Person
...そしてこのインスタンス
scala> val b = Person("Kevin", 100)
b: Person = Person(Kevin,100)
このコードを好む理由はありますか(@
を使用)
scala> b match {
| case p @ Person(_, age) => println("age")
| case _ => println("none")
| }
age
...次のことですか?
scala> b match {
| case Person(_, age) => println("age")
| case _ => println("none")
| }
age
おそらく私は@
の意味/力が欠けているのでしょうか?
オブジェクト自体も処理する場合は、@
のみを含めます。したがって:
that match{
case p @ Person(_, age) if p != bill => age
case Person(_, age) => age - 15
case _ => println("Not a person")
}
そうでなければ、それを含めることには実質的な意味はありません。
上記の答えに対するコメントについて。
このケースクラスを検討してください。
case class Employee(name: String, id: Int, technology: String)
パターンマッチングを行います。
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**