斯卡拉:case类转换为对象
问题描述:
我有两个case类像这样的 -斯卡拉:case类转换为对象
case class GetList()
case class Add(num: Int)
我有一个演员的接收方法是这样的 -
override def receive() = {
case a: Add => // do something
case g: GetList => // do something
case x: Any => // something
}
我打电话演员如 -
ref ! Add(1)
ref ! GetList
对于添加(1)消息,我得到一个一击:在添加接收。但是,对于GetList消息,它将发送到x:Any。 仔细观察我发现我得到的实例是GetList $类型,它通常表示一个“对象”。
谁在做这种转换,为什么?这种怪异行为的基本原理是什么?
答
您最好使GetList
a case object
代替,以便您的新代码看起来像case object GetList
,这样您就不必担心空括号。另一件需要注意的是,空的案例类也被弃用。
答
由于GetList是没有参数的case类。你要称呼其为GetList()
不GetList
ref ! GetList()
因此改变ref ! GetList
到ref ! GetList()
GetList
是这样的类GetList
对应的同伴对象。如果你想要案例类的实例,你必须做GetList()
请注意带空构造函数的case类。
反而使情况对象
case object GetList
从斯卡拉版本2.11.1空的情况下,类弃用。
答
没有转换,它的case类是如何工作的:当你写case class GetList()
,这相当于
class GetList() { ... }
object GetList { ... }
(有一些方法里面{ ... }
自动定义)。
所以ref ! GetList
发送值GetList
,这是不GetList
的类的一个实例。当case g: GetList
获得该类的实例时成功。
谢谢。另外,我必须更改我的接收匹配器,使其看起来像'case GetList',而不是'case g:GetList' – anindyaju99