【问题标题】:Overriding Supervisorstrategy as a val in concrete Actor将 Supervisorstrategy 作为具体 Actor 中的 val 覆盖
【发布时间】:2016-09-19 07:19:59
【问题描述】:

Scala 中的Actor trait 是这样定义的,

/**
* User overridable definition the strategy to use for supervising
* child actors.
*/
def supervisorStrategy: SupervisorStrategy = SupervisorStrategy.defaultStrategy

但是我看到具体参与者的所有示例代码都定义如下,

override val supervisorStrategy = OneForOneStrategy(loggingEnabled = false) {
    ...
  }

我想了解的是为什么 supervisorStrategy 被覆盖为 val
为什么不将其覆盖为def

是不是因为内存的考虑,比如我们不想每次调用方法时都进行这个评估?

【问题讨论】:

标签: scala akka akka-supervision akka-actor


【解决方案1】:

所以首先使用 scala trait 来保存我们知道通常需要覆盖的抽象定义。因此,将方法定义为 val 确实没有意义,除非该方法应由该 trait 的所有具体扩展调用。

通常,当我们使用 def 方法扩展 trait 时,我们会打开所有选项。也就是说,我们可以将其覆盖为 defvallazy val。 选择通常取决于用例。 在这种情况下,我们不希望每次从 akka 子系统调用 superVisorStrategy 方法时,主管策略都会改变。因此,一旦方法执行完毕,我们希望保留未来的值,从而节省一些内存。 因此,在大多数示例中,它被定义为 vallazy val

【讨论】:

    猜你喜欢
    • 2017-07-21
    • 1970-01-01
    • 2019-12-08
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    相关资源
    最近更新 更多