1. ホーム
  2. scala

パターンマッチング `@` シンボル

2023-10-05 21:30:07

質問

このような場合 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")
}

そうでなければ、それを含めることに実質的な意味はない。