为了概括一个函数,我发现自己使用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上)
该功能有效,但我怎样才能摆脱空值?
答案 0 :(得分:4)
为什么不呢:
trait ContextSwitch {
def appropriateContext(implicit factory: ActorRefFactory) = factory
}
这样,您只需让scala编译器为您选择ActorContext
或ActorSystem
,无论哪个在当前上下文中都可见。