2011-10-07 11 views
6

Stavo cercando di aggiungere un po 'di interattività al mio ciclo di test/debug, quindi ho provato a giocare con le mie classi dal REPL di Scala. Funziona alla grande ma ha lo svantaggio di non potere accedere ai membri del pacchetto e del livello privato, che possono essere testati da un test di unità (se il test è nello stesso pacchetto).Come utilizzare membri con predefinito (pacchetto) o livello di accesso privato in REPL?

Posso "impostare" il pacchetto "contesto" di REPL Scala?

Immagino che potrei usare la riflessione per accedere ai membri, ma è così tanto che digitando si vanificherebbe lo scopo di utilizzare il REPL in primo luogo.

risposta

1

Vuole dire che non è possibile accedere ai membri definiti nello package object? È possibile importare questi membri utilizzando

import mypackage._ 

o semplicemente accedervi utilizzando il modulo prefissato mypackage.mymember(...).

5

Presumo che la classe che si sta testando sia scritta in Java poiché si deve fare di tutto per creare un membro del pacchetto solo in Scala.

In breve, non è possibile. Ogni riga nel REPL è inclusa nel proprio pacchetto, quindi non sarà consentito accedere a un altro membro del pacchetto da un altro pacchetto. Anche se v'è una proprietà di sistema non documentato per cambiare il prefisso del nome di pacchetto predefinito utilizzato per il confezionamento, il nome del pacchetto è ancora generato automaticamente incrementando un numero:

$ scala -Xprint:parser -Dscala.repl.naming.line=foo.line 
scala> val x = 1 
[[syntax trees at end of parser]]// Scala source: <console> 
package foo.line1 { 
    object $read extends scala.ScalaObject { 
    // snip ... 
    object $iw extends scala.ScalaObject { 
     // snip ... 
     object $iw extends scala.ScalaObject { 
     // snip ... 
     val x = 1 
     } 
    } 
    } 

Supponendo che questo è qualcosa che si fa spesso, ciò che si potrebbe fare è creare un file che rende il riflesso facile da usare e quindi caricarlo nel REPL utilizzando il comando :load.

Problemi correlati