2011-10-07 8 views
6

Estaba intentando agregar algo de interactividad a mi ciclo de prueba/depuración, así que traté de jugar con mis clases de Scala REPL. Esto funciona bien, pero tiene la desventaja de que no puedo acceder a miembros de nivel privado y de paquete, que se pueden probar a partir de una prueba unitaria (si la prueba está en el mismo paquete).¿Cómo usar los miembros con el nivel de acceso predeterminado (paquete) o privado en REPL?

¿Puedo "configurar" el paquete "contexto" de Scala REPL?

Supongo que podría usar el reflejo para acceder a los miembros, pero eso es tanto tipear que sería frustrante el propósito de usar el REPL en primer lugar.

Respuesta

1

¿Quiere decir que no puede acceder a los miembros definidos en el package object? Puede importar estos miembros utilizando

import mypackage._ 

o simplemente acceder a ellos utilizando la forma prefijada mypackage.mymember(...).

5

Supongo que la clase que estás probando está escrita en Java, ya que tienes que salir de tu camino para crear un único miembro de paquete en Scala.

En resumen, no es posible. Cada línea en el REPL está incluida en su propio paquete, por lo que no se le permitirá acceder a otro miembro de solo paquete de ningún otro paquete. A pesar de que hay una propiedad del sistema no documentada para cambiar el prefijo de nombre de paquete predeterminado que se utiliza para el envasado, el nombre del paquete está siendo generado automáticamente por incremento de un número:

$ 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 
     } 
    } 
    } 

Suponiendo que esto es algo que se hace a menudo, lo que podría hacer es crear un archivo que hace que la reflexión sea fácil de usar y luego cargarla en REPL usando el comando :load.

Cuestiones relacionadas