2012-04-04 6 views
12

Si tengo dos archivos Scala sin compilar por separado en el mismo directorio que:¿Puede un script de Scala hacer referencia a otro código scala no compilado en el mismo directorio?

// hello.scala 
object hello { 
    def world() = println("hello world") 
} 

y:

// do.scala 
hello.world() 

me sale un error cuando se ejecuta do.scala:

$ scala do.scala 
error: not found: value hello 

lugar Primero tengo que compilar el archivo hello.scala y ponerlo en el classpath para que funcione:

$ scalac hello.scala 
$ scala -cp hello do.scala 
hello world 

¿Hay alguna manera de hacer que un script llame al otro archivo scala no compilado usando el uso correcto de import, package, classpath, la herramienta de línea de comando scala u otra cosa?

+0

Hice una pregunta similar hace un tiempo. Las respuestas pueden ser útiles: http://stackoverflow.com/questions/3760645/in-scala-is-it-possible-to-write-a-script-which-refers-to-another-script –

Respuesta

2

Mirar sobre la marcha compilación/incrustación del compilador. El util-eval de Twitter es uno de esos ejemplos.

8

Quizás no sea exactamente lo que está buscando, pero a partir de la Scala REPL shell que puede hacer

:load hello.scala 
:load do.scala 

para lograr el mismo resultado:

$ scala 
Welcome to Scala version 2.9.1 (Java HotSpot(TM) Server VM, Java 1.6.0_26). 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> :load hello.scala 
Loading hello.scala... 
defined module hello 

scala> :load do.scala 
Loading do.scala... 
hello world 

scala> 

Si estás queriendo algo no -interactive para scripting

$ cat <<EOF | scala 
:load hello.scala 
:load do.scala 
EOF 

funciona también.

Use :help para ver más cosas interesantes que puede hacer el shell REPL.

+0

Interesante. Si tuviera otros jarrones que necesitaba llamar desde el código, ¿podría usar el mismo truco pero con "cat << EOF | scala -cp jarfile.jar"? – user1305156

+0

Hacer esto o simplemente "cat myreplcommandsfile | scala" funciona pero hace que mi shell inutilizable después de eso molesto. – user1305156

+0

Noté que hay otro truco REPL ': cp ' que dice que le permite agregar un jar o un directorio al classpath. Y sí, me di cuenta de que hizo algo horrible en mi estado xterm después de que también terminó, pero pensé que era solo yo. No estoy seguro de cuál es la solución para eso; simplemente redirigir la salida no parece ayudar. – timday

Cuestiones relacionadas