案例类和案例对象之间的区别?

day*_*mer 45 scala akka

我正在学习Scala和Akka,在我最近查找解决方案时,我发现了类似的东西

 case class TotalTaxResult(taxAmount:Double)
 case object TaxCalculationTimeout
Run Code Online (Sandbox Code Playgroud)

两者有什么区别?

我什么时候应该使用另一个?

cmb*_*ter 63

案例类可以接受参数,因此该案例类的每个实例可以根据其参数的值而不同.另一方面,case对象不会在构造函数中使用args,因此只能有一个实例(单例,就像常规scala)object).

如果您对演员的消息不需要任何值区分,请使用案例对象.例如,如果你有一个做了一些工作的演员,而你从外面想告诉它做什么工作,那么也许你会做这样的事情:

case object DoWork

...

def receive = {
  case DoWork => 
     //do some work here
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您想要完成工作的某些变化,您可能需要重新定义您的消息,如下所示:

case class DoWorkAfter(waitTime:Long)

...

def receive = {
  case class DoWorkAfter(time) =>
    context.system.scheduler.scheduleOnce(time.milliseconds, self, DoWork)

  case DoWork => 
     //do some work here
}
Run Code Online (Sandbox Code Playgroud)


gre*_*ghz 6

案例对象是单例案例类.它们有点像枚举值.它可以像其他任何值一样用于模式匹配:

TaxCalculationTimeout match {
  case TaxCalculationTimeout => println("hello")
}
Run Code Online (Sandbox Code Playgroud)

定义案例类时,您将为该类的实例创建模板.TotalTaxResult(1.0)并且TotalTaxResult(2.0)是相同类型的两个不同值.而恰好有一个TaxCalculationTimeout价值.