Неявные параметры PartialFunction - PullRequest
0 голосов
/ 27 ноября 2018

у меня есть простая PartialFunction

type ChildMatch = PartialFunction[Option[ActorRef], Unit]

def idMatch(msg: AnyRef, fail: AnyRef)(implicit ctx: ActorContext): ChildMatch = {
    case Some(ref) => ref forward msg
    case _ => ctx.sender() ! fail
}

, но когда я попытался использовать это - компилятор хочет объявление, подобное этому:

...
implicit val ctx: ActorContext
val id: String = msg.id

idMatch(msg, fail)(ctx)(ctx.child(id))

, как вы можете видеть, он хочет, чтобы ctx занял второе местопараметр неявно

как я могу изменить свою функцию idMatch, чтобы использовать ее следующим образом:

...
implicit val ctx: ActorContext
val id: String = msg.id

idMatch(msg, fail)(ctx.child(id))

?

1 Ответ

0 голосов
/ 27 ноября 2018

Компилятор всегда будет предполагать, что второй список аргументов обозначает список неявных аргументов.Вы должны каким-то образом разделить вызовы двух функций.Вот некоторые возможности:

idMatch(msg, fail).apply(ctx.child(id))

val matcher = idMatch(msg, fail)
matcher(ctx.child(id))

// Provides the implicit explicitly from the implicit scope
idMatch(msg, fail)(implicitly)(ctx.child(id))
...