2010-07-05 4 views
21

Spesso non è necessario prestare attenzione agli argomenti impliciti in Scala, ma a volte è molto utile capire come il compilatore li fornisce automaticamente. Sfortunatamente, questa comprensione sembra essere difficile da ottenere!Esiste un modo sistematico per scoprire quali sono le implicite def in ambito e quali sono vincolate in un punto particolare?

Esiste un metodo generale per scoprire come è stato fornito un parametro implicito in una determinata porzione di codice?

Idealmente, un giorno l'integrazione IDE sarebbe fornire queste informazioni in qualche modo, ma mi aspetto per ora dovrò scavare più a fondo. C'è un modo per chiedere al compilatore di spiegare esattamente quale definizione implicita sceglie in un dato punto? Questo può essere decifrato indirettamente da altri output del compilatore?

Per fare un esempio, mi piacerebbe sapere come lavorare per conto mio in cui l'argomento implicit bf: CanBuildFrom[Repr, B, That]-TraversableLike.map proviene, senza leggere domande come this one su Stack Overflow!

risposta

14
  1. Aggiungere l'opzione -Xprint:typer alla riga di comando di scalac. Questo stampa l'albero del programma subito dopo la fase del compilatore di typer. Questo funziona meglio con un breve esempio autonomo. Puoi anche passarlo a scalac. Questo è davvero un enorme passo verso l'autosufficienza in Scala!
  2. Come menzionato da Randall, IntelliJ mostra in-scope e la vista implicita selezionata con CTRL-ALT-SHIFT-I. Aspetta un mese o due e gli argomenti impliciti hanno probabilmente un supporto simile.
+0

La fase di typer non dovrebbe fornire AST anche con informazioni di tipo inferito quando scalac esegue una risoluzione implicita? http://stackoverflow.com/q/27468053/306488. – lisak

7

Idealmente, un giorno l'integrazione IDE sarebbe fornire queste informazioni, in qualche modo, ...

Quel giorno è oggi con l'idea JetBrains'. Se si esegue l'ultimo EAP di IDEA versione 9 (9.0.3 EA # 95.289) con una recente versione notturna del plug-in Scala, questa funzionalità è presente. Ogni espressione di valore può essere selezionata e viene emesso un comando che mostra una finestra a comparsa che mostra tutte le conversioni implicite applicabili con quella selezionata dal compilatore.

E dal momento che a quanto pare ci sono alcuni che non lo sanno ancora, esiste una Community Edition IDEA gratuita e open-source che supporta il plug-in Scala.

Problemi correlati