2010-09-21 7 views
5

Je cherche actuellement à utiliser des scripts Scala pour contrôler le cycle de vie d'une base de données MySQL au lieu d'utiliser des scripts MS-DOS (je suis sur Windows XP) .Dans Scala, est-il possible d'écrire un script qui fait référence à un autre script?

Je veux avoir un script de configuration qui ne contient que des informations de configuration, et 1 ou plusieurs scripts de gestion qui utilisent les informations de configuration pour effectuer diverses opérations telles que le démarrage, l'arrêt, l'état de spectacle, etc .....

Est-il possible d'écrire un script Scala qui inclut/imports/references un autre script Scala? J'ai regardé l'option -i de l'interprète scala, mais cela lance une session interactive qui n'est pas ce que je veux.

Répondre

3

J'utiliserais Process et j'appellerais l'autre script Scala comme n'importe quelle autre commande.

+0

J'ai l'impression d'avoir à peine percé la surface de la richesse de Scala, alors quand j'ai lu la question de l'OP, je m'attendais à apprendre que Scala ajoute quelque chose au-delà de java.lang.ProcessBuilder ... mais je n'ai rien trouvé. Est-ce le cas? –

+0

@Rodney Oui. Il est largement utilisé par SBT, qui en a une version plus à jour. Cette version est obsolète et ne se compile probablement pas sous Scala 2.8. Je pense qu'il y avait des plans pour le mettre à jour, mais vous feriez mieux de parler à son développeur à ce sujet. –

+0

Pour mon cas d'utilisation, Process serait très utile pour exécuter des scripts MySQL. J'avais effectivement écrit un simple code Scala pour le faire, bien que ma solution ne soit nulle part aussi complète que Process. Cependant, ce que je cherche, c'est la possibilité d'utiliser des variables et des méthodes définies dans un script scala à partir d'un autre script Scala. Je ne peux pas voir comment le processus m'aiderait ici. Quelque chose comme le moteur de script Sling Scala semble très utile. –

4

Selon le code Scala man, le pré-chargement du script fonctionne uniquement en mode interactif.

Pour contourner le problème, vous pouvez quitter le mode interactif après l'exécution du script. Voici le code de child.bat (script qui comprend un autre générique):

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

println(geneticFunc) 
println(childFunc) 
exit; 

genericFunc est défini à genetic.bat

La sortie de child.bat:

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

Merci. Le mode interactif ne m'aide pas beaucoup. Comme solution de contournement, j'utiliserai probablement XML pour stocker les informations de configuration et au lieu d'avoir plus de 1 scripts, j'écrirais simplement un seul script auquel on pourrait passer des options de ligne de commande pour effectuer diverses opérations. –

+0

Oups, n'a pas vu votre mise à jour car j'ai posté mon commentaire. Je vais regarder votre méthode. –

+0

Le seul problème avec cette approche est que lorsque le script est chargé en mode interactif, l'interpréteur ne peut pas reconnaître l'en-tête de lot et affiche certaines erreurs sur la console. Cependant, ces avertissements peuvent être ignorés, car le script finit par fonctionner correctement. –

1

Une option serait d'avoir un script qui concatène deux fichiers ensemble, puis le lance, quelque chose comme:

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

ou similaire. Ensuite, vous gardez les deux séparés comme vous le souhaitiez.

Questions connexes