2010-09-21 16 views
5

Attualmente sto cercando di utilizzare gli script Scala per controllare il ciclo di vita di un database MySQL invece di utilizzare gli script MS-DOS (sono su Windows XP) .In Scala, è possibile scrivere uno script che fa riferimento a un altro script

voglio avere uno script di configurazione, che contiene solo le informazioni di configurazione, e 1 o più script di gestione che utilizzano le informazioni di configurazione per eseguire varie operazioni come start, stop, visualizzare lo stato, ecc .....

È possibile scrivere uno script Scala che include/importa/fa riferimento ad un altro script Scala?

Ho dato un'occhiata all'opzione -i dell'interprete scala, ma questo avvia una sessione interattiva che non è quello che voglio.

risposta

3

Vorrei usare Process e chiamare l'altro script Scala come qualsiasi altro comando.

+0

Mi sento come se avessi a malapena tagliato la superficie della ricchezza di Scala, quindi quando ho letto la domanda dell'OP mi aspettavo di imparare che Scala aggiungesse qualcosa di proprio oltre java.lang.ProcessBuilder ... ma non ho trovato nulla. È questo il caso? –

+0

@Rodney Sì. È usato estesamente da SBT, che ha una versione più aggiornata di esso. Questa versione non è aggiornata e probabilmente non viene nemmeno compilata con Scala 2.8. Penso che ci fossero piani per aggiornarlo, ma è meglio parlarne con il suo sviluppatore. –

+0

Per il mio caso d'uso, Process sarebbe molto utile per eseguire script MySQL. In realtà avevo scritto un semplice codice Scala per farlo, sebbene la mia soluzione non fosse completa come Process. Tuttavia, quello che sto cercando è la possibilità di usare variabili e metodi definiti in uno script di scala da un altro script di Scala. Non riesco a vedere come Process potrebbe aiutarmi qui. Qualcosa come il motore di scripting di Sling Scala sembra abbastanza utile. –

4

Secondo Scala man, il pre-caricamento degli script funziona solo per la modalità interattiva.

Come soluzione temporanea, è possibile uscire dalla modalità interattiva dopo aver eseguito lo script. Ecco il codice di child.bat (script che comprende un altro generico):

::#! 
@echo off 
call scala -i genetic.bat %0 
goto :eof 
::!# 
def childFunc="child" 

println(geneticFunc) 
println(childFunc) 
exit; 

genericFunc è definito in genetic.bat

L'uscita del child.bat:

>child.bat 
Loading genetic.bat... 
...  
geneticFunc: java.lang.String 
Loading child.bat... 
... 
childFunc: java.lang.String 
generic 
child 
+1

Grazie. La modalità interattiva non mi aiuta molto. Come soluzione, probabilmente userò XML per memorizzare le informazioni di configurazione e invece di avere più di 1 script, scriverò semplicemente un singolo script al quale si possono passare le opzioni della riga di comando per eseguire varie operazioni. –

+0

Oops, non ho visto il tuo aggiornamento come ho postato il mio commento. Darò un'occhiata al tuo metodo. –

+0

L'unico problema con questo approccio è che quando lo script viene caricato in modalità interattiva, l'interprete non può riconoscere l'intestazione del batch e stampa alcuni errori sulla console. Tuttavia, questi avvertimenti possono essere ignorati, poiché lo script alla fine funziona correttamente. –

1

Una possibilità sarebbe quella di avere uno script che concatena due file insieme e quindi lo lancia, qualcosa del tipo:

@echo off 
type config.scala > temp.scala 
type code.scala >> temp.scala 
scala temp.scala 
del temp.scala 

o simile. Quindi mantieni i due separati come desideri.

Problemi correlati