2010-09-21 15 views
5

Ich suche derzeit mit Scala-Skripten den Lebenszyklus einer MySQL-Datenbank statt MS-DOS-Skripte zu steuern (ich bin auf Windows XP) .In Scala, ist es möglich, ein Skript zu schreiben, das auf ein anderes Skript verweist

Ich mag ein Konfigurationsskript haben, die nur Konfigurationsinformationen halten, und ein oder mehr Management-Skripte, die die Konfigurationsinformationen verwenden, um verschiedene Operationen wie Start auszuführen, stoppen, zu zeigen Status, etc .....

Kann man ein Scala-Skript schreiben, das ein anderes Scala-Skript enthält/importiert/referenziert?

Ich habe mir die Option -i des Scala-Interpreters angeschaut, aber das startet eine interaktive Sitzung, die nicht das ist, was ich will.

Antwort

3

Ich würde Process verwenden und das andere Scala-Skript wie jeden anderen Befehl aufrufen.

+0

Ich habe das Gefühl, dass ich die Oberfläche von Scalas Reichtum nur knapp geknackt habe. Als ich also die OP-Frage gelesen habe, habe ich erwartet, dass Scala etwas über java.lang.ProcessBuilder hinzufügt ... aber ich habe nichts gefunden. Ist das der Fall? –

+0

@Rodney Ja. Es wird häufig von SBT verwendet, das eine aktuellere Version hat. Diese Version ist veraltet und wird wahrscheinlich nicht einmal unter Scala 2.8 kompiliert. Ich denke, es gab Pläne, es zu aktualisieren, aber Sie sollten besser mit seinem Entwickler darüber sprechen. –

+0

Für meinen Anwendungsfall wäre Process sehr nützlich, um MySQL-Skripte auszuführen. Ich hatte dazu einen einfachen Scala-Code geschrieben, obwohl meine Lösung nirgends so vollständig ist wie Process. Was ich jedoch suche, ist die Fähigkeit, Variablen und Methoden zu verwenden, die in einem Scala-Skript aus einem anderen Scala-Skript definiert sind. Ich kann nicht sehen, wie Process mir hier helfen würde. Etwas wie die Sling Scala Scripting Engine scheint recht nützlich zu sein. –

4

Gemäß Scala man funktioniert das Vorladen von Skripts nur im interaktiven Modus.

Als Workaround können Sie den interaktiven Modus nach dem Ausführen des Skripts beenden. Hier ist der Code von child.bat (Skript, das einer anderen generischen enthält):

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

println(geneticFunc) 
println(childFunc) 
exit; 

genericFunc definiert ist, bei genetic.bat

Der Ausgang der child.bat:

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

Danke. Der interaktive Modus hilft mir nicht viel. Zur Problemumgehung werde ich wahrscheinlich XML verwenden, um die Konfigurationsinformationen zu speichern, und statt mehr als 1 Skripte zu schreiben, würde ich einfach ein einzelnes Skript schreiben, dem man Befehlszeilenoptionen übergeben kann, um verschiedene Operationen auszuführen. –

+0

Hoppla, habe dein Update nicht gesehen, da ich meinen Kommentar gepostet habe. Ich werde mir deine Methode ansehen. –

+0

Das einzige Problem bei diesem Ansatz besteht darin, dass der Interpreter den Stapelkopf nicht erkennt und einige Fehler auf der Konsole ausgibt, wenn das Skript im interaktiven Modus geladen wird. Diese Warnungen können jedoch ignoriert werden, da das Skript schließlich ordnungsgemäß ausgeführt wird. –

1

Eine Möglichkeit wäre, ein Skript haben welche zwei Dateien miteinander verkettet und dann startet, so etwas wie:

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

oder ähnlich. Dann behaltst du die zwei getrennt, wie du es wünschtest.

Verwandte Themen