当前,我有一个actor,它接收一些消息并将该消息的内容保存到可变的类级变量中:
class MyActor extends Actor {
val items1: Seq[Item] = _
val items2: Seq[Item] = _
def receive = {
case Start(items1, items2) =>
items1= items1
items2 = items2
case Result(...) => ...
}
private def method1(args...) = {
// do something with items1 and items2
}
private def method2(args...) = {
// do something with items1 and items2
}
}
而且我读到,创建多个receive
函数并使用context.become
/unbecome
处理不同的状态真的很好。因此,就我而言,我可以使用如下receive
功能:
def running(items1: Seq[Item], items2: Seq[Item]): Receive = {
case Result(...) => ...
}
val waiting: Receive = {
case Start(items1, items2) =>
context.become(running(items1, items2))
start( )
}
在我看来,这种方法非常清晰,美观,但问题是我还有其他需要此方法和变量的方法(method1
和method2
)。唯一可能的解决方法我想到的是通过和以和为功能,但是这种方法已经有2-3个参数,并增加更多的参数给他们会让他们难以阅读(其实我有2点以上的方法)。items1
items2
items1
items2
method1
method2
那么,Akka是否有针对此类情况的模式?还是拥有类级别的var
s(在我的第一个示例中)是相当“合法”的?
So, is there any patterns in Akka for such cases?
我什么都不知道。
Or it's pretty 'legal' to have class-level vars (as in my first example)?
可以有var
内部演员,只要您不从关闭或期货访问它们即可。
但是,我建议您使用参数解决方案。如果参数列表变得很长,则可以考虑将其分组到case class
es中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句