scala – 与演员使用“var”状态的替代方案?
发布时间:2020-12-16 09:29:48 所属栏目:安全 来源:网络整理
导读:我发现自己使用vars相当经常与akka演员保持状态。例如,如果我的演员需要维护一个项目列表,我可能会这样做: class ListActor extends Actor{ var xs : List[Int] = List() def receive = { case x : Int = xs = x :: xs }} 使用可变变量似乎违背了Scala的
我发现自己使用vars相当经常与akka演员保持状态。例如,如果我的演员需要维护一个项目列表,我可能会这样做:
class ListActor extends Actor{ var xs : List[Int] = List() def receive = { case x : Int => xs = x :: xs } } 使用可变变量似乎违背了Scala的精神。或者我用这个: class ListActor2 extends Actor{ import context._ def collect_ints(accu : List[Int]) : Receive = { case x : Int => become(collect_ints(x :: accu)) } def receive = collect_ints(Nil) } 我喜欢这样看起来更多,但是我必须担心堆栈溢出? 我知道FSM的特质,并且也在之前使用过,但在某些情况下,它似乎太多了。 维护简单状态的推荐方法是什么?还有其他的替代品,我不知道吗? 另外,如果我经常发现自己需要可变变量,这通常是一个坏的标志?我没有正确使用演员模型吗? 解决方法
在actor模型中,我没有看到var的简单状态的任何问题。
通过设计,Akka通过并发访问状态变量来防止演员的状态被破坏或锁定。 只要您不使用Future for instance将其状态暴露给其他线程,则使用var进行简单状态不应该是一个问题。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |