2012-04-04 4 views
12

Se ho due file separati non compilato Scala nella stessa directory:Uno script Scala può fare riferimento ad altro codice scala non compilato nella stessa directory?

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

e:

// do.scala 
hello.world() 

ottengo un errore durante l'esecuzione do.scala:

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

Invece Devo prima compilare il file hello.scala e metterlo sul classpath per farlo funzionare:

C'è un modo per ottenere uno script per chiamare l'altro file di scala non compilato utilizzando l'uso corretto di import, package, classpath, lo strumento di riga di comando scala o qualcos'altro?

+0

Ho fatto postare una domanda simile qualche tempo fa. Le risposte potrebbero essere utili: http://stackoverflow.com/questions/3760645/in-scala-is-it-possible-to-write-a-script-which-refers-to-another-script –

risposta

2

Esaminare al volo la compilazione/incorporare il compilatore. Twitter util-eval è uno di questi esempi.

8

Forse non è esattamente quello che stai cercando, ma dalla Scala REPL shell si può fare

:load hello.scala 
:load do.scala 

per ottenere lo stesso risultato:

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

Se hai intenzione qualcosa di non -interattivo per lo scripting

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

funziona anche.

Utilizzare :help per le cose più interessanti che la shell REPL può fare.

+0

Interessante. Se avessi altri vasi che dovevo chiamare dal codice, avrei potuto usare lo stesso trucco ma con "cat << EOF | scala -cp jarfile.jar"? – user1305156

+0

Questo o semplicemente "cat myreplcommandsfile | scala" funziona ma rende inutilizzabile il mio guscio dopo quel fastidioso. – user1305156

+0

Nota che c'è un altro trucco REPL ': cp ' che afferma di consentire di aggiungere un jar o una directory al classpath. E sì, ho notato che ha fatto qualcosa di orribile al mio stato xterm dopo che è finito, ma ho pensato che fosse solo io. Non sei sicuro di quale sia la correzione per quello; semplicemente il reindirizzamento dell'output non sembra essere di aiuto. – timday