定义演员时的最佳做法是什么?
演员状态:定义一个" var"更好吗?使用如下代码中的集合,或者更好地定义" val"可变收集?我们应该将其定义为私人吗?
我们应该将Actor的方法定义为私有吗?
CopyFromPath
答案 0 :(得分:2)
关于第一点,一般来说,我都不会去。相反,将print_r($average_score['avg'];
方法设置为将集合作为参数的方法,并在使用context.become(...)
更改集合时更新actor的状态。例如:
receive
关于第二点,任何助手方法可能仅供演员自己使用,因此将它们设为私有。
答案 1 :(得分:1)
首先,它确实取决于你正在变异的项目集合的大小。您是否会在100k消息的过程中向Map
添加100k项?如果是这种情况,也许您应该使用可变集合,以避免复制整个集合以添加每个项目的开销。根据用例做出明智的决定。
以下是对可变集合与不可变集合的性能的引用:http://www.scala-lang.org/docu/files/collections-api/collections.html
对于第二点,方法的可见性与Actor
的接口无关。 应该与Actor
进行交互的唯一方法是通过询问和告知消息,以便除了向读者推断目的之外,任何成员方法的可见性都没有什么影响。