2014-05-19 26 views
8

Attualmente sto lavorando con una base di codice che richiede un parametro esplicito per avere la possibilità implicita per le parti della sua attuazione:Trattare con parametri espliciti richiesti dal parametro implicito interna elenca

class UsesAkka(system: ActorSystem) { 
    implicit val systemImplicit = system 

    // code using implicit ActorSystem ... 
} 

Ho due domande:

  1. Esiste un modo più ordinato per "promuovere" un parametro esplicito sull'ambito implicito senza influire sulla firma della classe?

  2. è la raccomandazione generale di impegnarsi per sempre importazione di alcuni tipi attraverso liste di parametri impliciti, come ActorSystem per un'applicazione Akka?

semanticamente parlando, mi sembra che ci sia un caso in cui la dipendenza esplicita il suo tipo di dipendenza può essere implicita di un altro tipo, ma spostando l'interruttore implicit sembra avere un effetto sistemico su tutto il codebase.

+1

Sembra che avere "sistema: ActorSystem' ** non ** essere implicito non abbia alcun vantaggio. È sempre possibile sovrascrivere un parametro implicito. Per le tue domande, direi ** no ** e ** forse **. – dyross

risposta

1

Perché non rendere privato systemImplicit?

class UsesAkka(system: ActorSystem) { 
    private implicit val systemImplicit = system 
// ^^^^^^^ 

    // ... 
} 

In questo modo, non cambierebbe la firma di UsesAkka.

+0

Avrei preferito fare solo un commento, ma non ho ancora abbastanza reputazione ... Spero solo che questo risponda alla tua prima domanda. – al3xar

+0

+1 un miglioramento del mio approccio originale, ma tutto nella domanda originale è ancora valido :) –

Problemi correlati