2013-08-20 10 views
6

Questo è davvero fastidioso quando si scrive un codice altamente concorrente con la risposta Futures o Actors e si importa manualmente ExecutionContext.Implicits.global. Ho cercato di trovare qualche buona spiegazione del perché non è stato impostato come parametro predefinito, ad esempio done con Strategy in Scalaz Concurrent. Sarebbe molto utile, non inserire/rimuovere tutte quelle importazioni nel codice. O mi manca qualche logica?Perché Global ExecutionContext non è un parametro predefinito nel blocco futuro?

risposta

10

La tendenza generale sembra essere quella di richiedere all'utente di importare esplicitamente cose come impliciti, operatori aggiuntivi o DSL. Penso che sia una buona cosa dal momento che rende le cose meno "magiche" e più comprensibili.

Ma nulla ti impedisce di definire un valore implicito a livello di pacchetto per il tuo codice. Si noti che se l'implicito ExecutionContext è sempre stato importato per impostazione predefinita, non sarebbe possibile farlo.

Nel oggetto del pacchetto:

package object myawsomeconcurrencylibrary { 
    implicit def defaultExecutionContext = scala.concurrent.ExecutionContext.global 
} 

In ogni classe nello stesso pacchetto:

package myawsomeconcurrencylibrary 

object Bla { 
    future { ... } // implicit from package object is used unless you explicitly provide your own 
} 
Problemi correlati