Chciałbym mieć funkcję wyższego rzędu, która przyjmuje parametr funkcji, która akceptuje określony niejawny parametr.Typ funkcji z parametrami Implicit w Scala
Dokładniej, próbuję utworzyć funkcję, która wymaga metody tworzenia Future
, która zależy od niejawnego kontekstu i zwraca metodę, która nie zależy od kontekstu.
Aby być bardziej konkretne, powiedzmy, że mam coś takiego:
def foo(a: Int)(implicit ctx: ExecutionContext): Future[Float] = future { somelongBar... }
chciałbym mają metody takie jak to:
def provideCtx[A](func: ExecutionContext => A): A = {
val ctx = setupCtx
func(ctx)
}
ale jeśli zadzwonię provideCtx(foo)
, z kompilator narzeka na brak kontekstu wykonywania niejawnego.
Fakt, że mam do czynienia z Kontekstem wykonania, nie jest bardzo ważny. To, co chciałbym znaleźć, to jak napisać typ parametru, aby zaakceptować funkcję z niejawnym argumentem określonego typu. Rozumiem, że część niejawna jest argumentem curry, tak więc faktycznie mam taką funkcję jak: ExecutionContext => Int => Future[Float]
, i jestem całkiem pewny, że w czasie wykonywania, jvm nie wie, że ten ExecutionContext jest niejawny, ale nie mogę spraw, aby kompilator to zrozumiał.
Rzeczywiście, skończyłem pisać coś bardzo podobnego teraz, to tylko trochę uciążliwe. – Mortimer