To naprawdę denerwujące, gdy piszesz bardzo silnie współbieżny kod z reakcją Futures lub Actors i ręcznie importujesz ExecutionContext.Implicits.global
. Próbowałem znaleźć dobre wyjaśnienie, dlaczego nie został on ustawiony jako parametr domyślny, tak jak jest done z Strategy
w Scalaz Concurrent
. Byłoby to bardzo pomocne, aby nie wstawiać/nie usuwać całego importu z kodu. Czy może brakuje mi jakiejś logiki?Dlaczego globalny ExecutionContext nie jest parametrem domyślnym w przyszłym bloku?
6
A
Odpowiedz
10
Wydaje się, że ogólny trend wymaga od użytkownika wyraźnego importowania rzeczy takich jak implicity, dodatkowe operatory lub DSL. Myślę, że to dobrze, ponieważ sprawia, że rzeczy są mniej "magiczne" i bardziej zrozumiałe.
Ale nic nie stoi na przeszkodzie, aby zdefiniować niejawną wartość kodu dla całego pakietu. Zauważ, że jeśli niejawny ExecutionContext był zawsze importowany domyślnie, nie byłbyś w stanie tego zrobić.
W obiekcie pakiet:
package object myawsomeconcurrencylibrary {
implicit def defaultExecutionContext = scala.concurrent.ExecutionContext.global
}
W każdej klasie w tym samym opakowaniu:
package myawsomeconcurrencylibrary
object Bla {
future { ... } // implicit from package object is used unless you explicitly provide your own
}
Powiązane problemy
- 1. Nieoczekiwana rozdzielczość przeciążania z domyślnym parametrem szablonu funkcji
- 2. Dlaczego czekanie jest niedozwolone w bloku finally?
- 3. Jak działa .NET ExecutionContext?
- 4. Jaka jest różnica między przyszłym a shared_future?
- 5. Redux - dlaczego stan jest w jednym miejscu, nawet w stanie, który nie jest globalny?
- 6. Dlaczego Scala używa ForkJoinPool do poparcia swojego domyślnego ExecutionContext?
- 7. Dlaczego podwójny niedozwolony jest parametrem szablonu innego niż typ?
- 8. Co jest w Javie "domyślnym pakietem systemowym"?
- 9. Priorytet Implicit ExecutionContext w Scali 2.12
- 10. Dlaczego nie mogę użyć elementów wewnętrznych kompilatora w bloku ASM?
- 11. Dlaczego Nullable <T> nie jest prawidłowym parametrem niestandardowego atrybutu, gdy T jest?
- 12. Dlaczego parametr wpisu w Kotlin nie ma żadnych innych ograniczeń, jeśli jest ograniczony innym parametrem?
- 13. Dlaczego nie można zdefiniować zmiennej rekursywnie w bloku kodu?
- 14. Dlaczego Git lista config (łącznie) nie jest taki sam jak system globalny + + lokalnego
- 15. Domyślnym ustawieniem strefy czasowej nie działa pomimo czasowej jest ważne
- 16. Dlaczego ta stała zmiennoprzecinkowa jest pusta przy wykonywaniu bloku statycznego?
- 17. Dlaczego jest pusta przestrzeń po moim bloku śródliniowym?
- 18. Dostęp do klucza rejestru "Globalny" jest odmawiany
- 19. ReferenceError i globalny obiekt
- 20. Niemożliwe: ten wskaźnik jest domyślnym argumentem. Czemu?
- 21. Zagraj Framework 2.1 - nie można odnaleźć ukrytą ExecutionContext
- 22. Dlaczego "to" nie jest niestabilne?
- 23. Dlaczego algorytm median-median nie może używać bloku wielkości 3?
- 24. "Nie można załadować NSManagedObjectModel. Nil jest niedozwolonym parametrem adresu URL"
- 25. Jak ograniczyć iterator do bycia przyszłym iteratorem?
- 26. Nie rozumiem głównego bloku Pythona. Co to jest?
- 27. Stan globalny w module Python
- 28. Web API: Filtr "globalny" nie działa (ExceptionFilter)
- 29. Globalny NPM zainstalowane, ale nie znaleziono polecenia
- 30. Ustaw globalny obiekt w błyszczące