2012-04-04 3 views
12

Wenn ich zwei separate unkompilierten scala-Dateien im gleichen Verzeichnis haben, wie:Kann ein Scala-Skript auf anderen nicht kompilierten Scala-Code im selben Verzeichnis verweisen?

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

und:

// do.scala 
hello.world() 

Ich erhalte eine Fehlermeldung, wenn do.scala ausgeführt wird:

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

Statt Ich muss zuerst die hello.scala-Datei kompilieren und sie auf den Klassenpfad setzen, damit sie funktioniert:

$ scalac hello.scala 
$ scala -cp hello do.scala 
hello world 

Gibt es eine Möglichkeit, ein Skript dazu zu bringen, die andere nicht kompilierte Scala-Datei mit der richtigen Verwendung von import, package, classpath, dem Befehlszeilenprogramm scala oder etwas anderem aufzurufen?

+0

Ich habe vor einer Weile eine ähnliche Frage gestellt. Die Antworten könnten nützlich sein: http://stackoverflow.com/questions/3760645/in-scala-is-it-possible-to-write-a-script-which-refers-to-another-script –

Antwort

2

Blick in die Kompilierung/Einbettung des Compilers. Twitter util-eval ist ein solches Beispiel.

8

Vielleicht nicht genau das, was Sie suchen, sondern aus der Scala REPL Shell Sie tun können,

:load hello.scala 
:load do.scala 

das gleiche Ergebnis zu erzielen:

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

Wenn Sie nicht wollen etwas sind -interaktiv für das Scripting

funktioniert auch.

Verwenden Sie :help für mehr interessante Dinge, die die REPL-Shell tun kann.

+0

Interessant. Wenn ich andere Gläser hätte, die ich aus dem Code aufrufen müsste, könnte ich den gleichen Trick verwenden, aber mit "cat << EOF | scala -cp jarfile.jar"? – user1305156

+0

Doing this oder nur "cat myreplcommandsfile | scala" funktioniert, macht aber danach meine Shell unbrauchbar. – user1305156

+0

Ich bemerke, dass es einen weiteren REPL-Trick 'gibt: cp ', der vorgibt, dass Sie dem Klassenpfad ein jar oder ein Verzeichnis hinzufügen können. Und ja, ich habe bemerkt, dass es etwas schreckliches in meinem xterm-Zustand gemacht hat, nachdem es auch beendet wurde, aber ich dachte, dass es nur ich war. Nicht sicher, was die Lösung dafür ist; einfach die Ausgabe umleiten scheint nicht zu helfen. – timday