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
}

?

ActorContextこのようにして、scala コンパイラーActorSystemに現在のコンテキストで表示されている方を選択させるだけです。

于 2013-11-10T10:30:20.440 に答える