私はこのケースクラスをパターンマッチングで使用できると読んでいます。しかし、私はパターンマッチングでも正規のクラスを使用することができます。 This questionは、通常のスケーラのパースペクティブを提供します。私はこの特定のコードのためにスカラーだけでなくakkaの観点からもそれを望んでいます。たとえば :Akkaのケースクラスについて特別なものは何ですか?
Actorクラス:
class TestActor extends Actor {
def receive={
case One(num)=>println("One "+num)
case t:Two=>println("Two "+t.num)
case _=>println("Another")
}
}
object TestActor{
case class One(num:Int)
}
クラス2:
class Two(var num:Int){ }
メイン:
object Main2 extends App{
val system=ActorSystem("t")
val testActor=system.actorOf(Props[TestActor],"test")
val t=new Two(200)
val o=TestActor.One(100)
testActor!o
testActor!t
}
出力は次のとおりです。
One 100
Two 200
私はここで何かが見つからないことを知っています。おそらくパターンマッチングを理解しています。誰かが私を助けることができますか?
大文字と小文字のクラスにはデフォルトの 'unapply'メソッドがあるので、' case Two(t) 'を書くことはできません。 –
私のコードが大文字小文字tで動作する場合:2つ、大文字小文字の区別が必要なのはなぜですか? – codingsplash
動作は同じですが、この場合はほとんどの場合読みやすさの問題です。 - 'Two(num)'を使用すると、内部変数に名前を付けて、この特定のコンテキスト_を明確にすることができます。 'case Two(receivedNum)'か何か。あなたが状態を参照した答えとして、ケースクラス(例えば、デフォルトの 'equals'と' hashCode')には他の利点がありますが、この特定のコードではどれも使用されませんでした。それでも、 "データコンテナ"であるクラスのためにケースクラスを使用することは良い習慣です。もしそれらが異なって使われるならば、それらは便利かもしれません。 –