我正在学习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)
案例对象是单例案例类.它们有点像枚举值.它可以像其他任何值一样用于模式匹配:
TaxCalculationTimeout match {
case TaxCalculationTimeout => println("hello")
}
Run Code Online (Sandbox Code Playgroud)
定义案例类时,您将为该类的实例创建模板.TotalTaxResult(1.0)并且TotalTaxResult(2.0)是相同类型的两个不同值.而恰好有一个TaxCalculationTimeout价值.
| 归档时间: |
|
| 查看次数: |
17373 次 |
| 最近记录: |