我已經閱讀過案例類可以用於模式匹配。但是,我也可以使用模式匹配的常規類。 This question給出了一個正規的scala透視圖。我希望從scala以及這個特定代碼的akka角度來看它。 例如:阿卡的案例課有什麼特別之處?
演員類:雙
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)
}
類別:
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
我知道我錯過了這裏的東西,可能是我對模式匹配的理解。有人可以幫我嗎?
請注意,您不能寫'case Two(t)',因爲case類帶有一個默認的'unapply'方法來啓用,而普通類不會(儘管您可以編寫一個)。 –
如果我的代碼適用於案例t:二,爲什麼我需要案例類? – codingsplash
行爲當然是相同的 - 在這種情況下,它主要是可讀性問題 - 「Two(num)」允許您指定內部變量,但不管您想要如何 - 在此特定上下文中使_intent_更清晰,例如'案例二(receivedNum)'或其他。正如你引用的答案所指出的那樣,case類還有其他好處(例如默認的'equals'和'hashCode'),但是這些特定的代碼都沒有使用它們。儘管如此,對於「數據容器」類使用case類是一個很好的做法 - 如果它們的使用方式不同,它們可能會派上用場。 –