2013-12-23 10 views
37

パターンマッチング `@この<code>Person</code>ケースクラスを考えると`記号

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 

多分私は@の意味/力が足りませんか?

答えて

74

オブジェクト自体も処理する場合は、@のみを含めます。したがって:

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

そうでなければ、それを含めることに本当の意味はありません。

+2

オブジェクト自体を参照するためにセミコロンを使用します。私はなぜセミコロンが 'オブジェクト自体を参照するために再利用されていないのだろうか? – Val

+2

@Val:彼のコードにセミコロンはありませんか? – cdmckay

+0

お役立ち情報この答えを読む前に、私はこう書いています: 'case p:Person if p!= bill => p.age' – erdavila

関連する問題