首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >案例类和案例对象的区别?

案例类和案例对象的区别?
EN

Stack Overflow用户
提问于 2015-08-18 17:04:57
回答 3查看 26K关注 0票数 64

我正在学习Scala和Akka,在最近查找solution时,我发现了如下内容

代码语言:javascript
复制
 case class TotalTaxResult(taxAmount:Double)
 case object TaxCalculationTimeout

这两者有什么区别呢?

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-18 17:12:44

一个案例类可以接受参数,因此该案例类的每个实例都可以根据其参数的值而有所不同。另一方面,一个case对象不接受构造函数中的args,因此只能有一个它的实例(单例,就像普通的scala object是)。

如果您给参与者的消息不需要任何值区分,请使用case对象。例如,如果你有一个演员做了一些工作,而你想让它做一些工作,那么也许你会做这样的事情:

代码语言:javascript
复制
case object DoWork

...

def receive = {
  case DoWork => 
     //do some work here
}

但是,如果您希望对工作的完成方式进行一些更改,您可能需要重新定义您的消息,如下所示:

代码语言:javascript
复制
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
}
票数 81
EN

Stack Overflow用户

发布于 2016-11-17 10:48:57

简而言之,Scala是一种面向对象的函数式编程语言。它具有模式匹配、纯面向对象方法等功能编程的特点。

有时,我们需要创建没有任何值的单例对象,比如传递一些用于模式匹配的信号。如果scala没有case对象的概念,我们只需要在匹配中使用枚举或等于一些字符串值。但这不是纯面向对象语言的可读性。在这个场景中,我们使用Case对象。

当我们需要创建具有不同值的多个对象时,会使用Case类。

票数 4
EN

Stack Overflow用户

发布于 2017-09-13 17:57:19

在一般情况下,您可以认为这两个类就像一个类和一个对象。当您执行case类ClassName(params list)时,它创建了一个生成对象的蓝图,而case对象在声明对象的作用域中定义了一个单例对象。从Scala2.10开始,您应该始终使用case对象而不是没有参数的case类。因此,当您想要对一些需要参数的值进行模式匹配时,您应该选择一个case类,但是如果您的值不接受参数,那么您应该使用case对象。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32078526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档