2010-09-21 17 views
5

Actualmente estoy buscando usar scripts de Scala para controlar el ciclo de vida de una base de datos MySQL en lugar de usar scripts de MS-DOS (estoy en Windows XP) .En Scala, es posible escribir un script que se refiera a otro script

Quiero tener un script de configuración que sólo tiene información de configuración, y 1 o más secuencias de comandos de gestión que utilizan la información de configuración para realizar diversas operaciones tales como arranque, parada, el estado de espectáculo, etc .....

¿Es posible escribir un script de Scala que incluya/importe/haga referencia a otro script de Scala?

He echado un vistazo a la opción -i del intérprete de scala, pero esto inicia una sesión interactiva que no es lo que quiero.

Respuesta

3

Usaría Process y llamaría a la otra secuencia de comandos de Scala como cualquier otro comando.

+0

Siento que apenas he descifrado la superficie de la riqueza de Scala, así que cuando leí la pregunta de la OP esperaba aprender que Scala agrega algo más allá de java.lang.ProcessBuilder ... pero no he encontrado nada. ¿Es este el caso? –

+0

@Rodney Sí. Es utilizado extensivamente por SBT, que tiene una versión más actualizada de él. Esta versión no está actualizada, y probablemente ni siquiera compila en Scala 2.8. Creo que había planes para actualizarlo, pero será mejor que hables con su desarrollador al respecto. –

+0

Para mi caso de uso, Process sería muy útil para ejecutar scripts de MySQL. De hecho, había escrito un código Scala simple para hacer eso, aunque mi solución no está en ninguna parte tan completa como Process. Sin embargo, lo que estoy buscando es la capacidad de usar variables y métodos definidos en un script scala de otro script Scala. No veo cómo Process me ayudaría aquí. Algo como el motor de scripts de Sling Scala parece bastante útil. –

4

Según Scala man, la precarga de scripts solo funciona para el modo interactivo.

Como solución alternativa, puede salir del modo interactivo después de ejecutar el script. Aquí está el código de child.bat (guión que incluye otro genérico):

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

println(geneticFunc) 
println(childFunc) 
exit; 

genericFunc se define en genetic.bat

La salida de child.bat:

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

Gracias. El modo interactivo no me ayuda mucho. Como solución alternativa, probablemente utilizaré XML para almacenar la información de configuración y, en lugar de tener más de 1 script, solo escribiría un único script para poder pasar opciones de línea de comandos para realizar varias operaciones. –

+0

Vaya, no vi su actualización cuando publiqué mi comentario. Echaré un vistazo a tu método. –

+0

El único problema con este enfoque es que cuando el script se carga en modo interactivo, el intérprete no puede reconocer el encabezado del lote e imprime algunos errores en la consola. Sin embargo, esas advertencias se pueden ignorar, ya que el script eventualmente funciona bien. –

1

Una opción sería tener un guión que concatena dos archivos juntos y luego lo inicia, algo así como:

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

o similar. Luego mantienes los dos separados como lo deseaste.

Cuestiones relacionadas