2012-02-10 15 views
8

Come è possibile visualizzare i tipi dedotti dal compilatore Scala per le espressioni, ecc.? Ho del codice con inferenza di tipo complicata e conversioni implicite, ed è difficile vedere cosa succede solo leggendo il codice.Visualizzazione dei tipi di espressioni Scala dedotti

Ho provato ad aggiungere

scalacOptions in Compile += "-Xprint-types" 

in build.sbt, ma questo non ha alcun effetto.

L'utilizzo di scalac direttamente non è molto allettante perché ho molte dipendenze.

Uso il plugin di Eclipse Scala e ENSIME per scrivere codice e SBT per la compilazione.

risposta

2

Questa funzione esatta è stata aggiunta in Eclipse Scala IDE 3.0!

Selezionare una parte di codice e premere Ctrl-Maiusc-W T (sostituendo Ctrl con Cmd su Mac) per visualizzare il tipo dedotto.

4

ha bisogno di essere

scalacOptions in Compile ++= Seq("-Xprint-types", "-Xprint:typer") 

invece.

Sfortunatamente l'uscita non è molto leggibile. :(

0

Hoist l'espressione di un non locale def o val, senza un esplicito tipo -. Allora apparirà nella visualizzazione Struttura in Eclipse, con un tipo derivato assegnato

Tuttavia, questo non è una soluzione ideale perché richiede un po 'di lavoro e non può essere usata quando è implicata la ricorsione

0

Stavo preparando una domanda su questo stesso problema, probabilmente è meglio che lo incolli qui (per favore non scottarmi per questo non è una risposta ..)

Ho provato la soluzione di Robin Green, ma (come sapete) dà più risultati di quanto richiesto.

Qui va:

Essendo nuovo a Scala, e il meccanismo di tipo derivato, penso che sarebbe spesso utile per essere in grado di fare qualcosa del genere:

@spitType s= something 
... 

L'immaginario spitType sarebbe come una macro in fase di compilazione (simile a #pragma warning in C++) che sputerebbe le informazioni sul tipo dell'espressione in fase di compilazione.

So che sono in grado di ottenere tali informazioni in fase di esecuzione, ma nei casi in cui il resto del codice non è ancora compilato, un messaggio in fase di compilazione sarebbe l'unica cosa utile.

Troverebbe tale capacità utile o semplicemente irrilevante?

+1

Heh, trovato in questo modo. Crea una variabile s.a. 'val xxx: Nothing' e assegna con l'espressione di cui vuoi conoscere il tipo. Produrrà sempre un errore poiché nessun tipo deriva da "Nothing". :) – akauppi

Problemi correlati