0

为了泛化一个函数,我发现自己使用了 null。但我不知道如何重构以删除它。这是代码片段:

trait ContextSwitch {
  def appropriateContext(implicit context: ActorContext = null, system: ActorSystem = null): ActorRefFactory = {

    val either: Either[ActorContext, ActorSystem] = if (context != null) Left(context) else Right(system)
    val refProvider = either.fold[ActorRefFactory](ac => ac, as => as)
    refProvider
  }
}

这个想法是我现在可以这样称呼:

appropriateContext.actorOf(Props[Actor])

无论上下文如何,它都有效。这使得我依赖它的其他功能可测试(因为测试是在系统级别,而这些功能通常部署在只有上下文可用的参与者上)

该功能有效,但我怎样才能摆脱空值?

4

1 回答 1

4

为什么不只是:

trait ContextSwitch {
  def appropriateContext(implicit factory: ActorRefFactory) = factory
}

?

这样,您只需让 scala 编译器为您选择ActorContextActorSystem为您选择,无论哪个在当前上下文中可见。

于 2013-11-10T10:30:20.440 回答