在这种情况下如何使用Null? (斯卡拉和阿卡)

时间:2013-11-10 10:09:27

标签: scala akka

为了概括一个函数,我发现自己使用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])

无论上下文如何都有效。这使我依赖它的其他函数可测试(因为测试是在系统级别,而函数通常部署在只有上下文的actor上)

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

1 个答案:

答案 0 :(得分:4)

为什么不呢:

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

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