2015-07-22 12 views
13

Aus irgendeinem Grunde sind Zwischenwerte nicht (rechte Seite des Arbeitsblatts) in der REPL Konsole ausgedruckt werdenDrucken Sie Scala Arbeitsblatt Ergebnisse im interaktiven Modus in IntelliJ

Zum Beispiel ist es das, was ich habe:

object test { 
    val obj = new MyObject(1) 
    obj.value 
} 

class MyObject(x: Int) { 
    def value = x 
} 

In den REPL Ergebnisse, erhalte ich nur folgendes:

defined module test 
. 
. 
. 
defined class MyObject 

Allerdings habe ich keine der Zwischenergebnisse erhalten, wie wenn ich beurteilen x.value

würde ich erwarten, so etwas wie:

> [email protected] 
> 1 

nach x.value

Gibt es Gründe, warum dies nicht aus gedruckt wird?

Antwort

15

Was in diesem Fall für mich funktionierte (und dies könnte für IntelliJ 14 besonders sein, da ich gesehen habe, wie es anders in Eclipse funktioniert), ist die Klasse innerhalb des Objektblocks, wie folgt:

Dadurch wurde die REPL-Instanz im Arbeitsblatt gezwungen, das Ergebnis automatisch auszuwerten und auf der rechten Seite auszudrucken.

+1

Danke für Ihre Hilfe, da ich seit einem Tag nach Auflösung gesucht habe. Aber als Neuling in Scala verstehe ich nicht, warum das passiert, weil ich glaube, dass es in Eclipse funktioniert. Dieses Problem tritt übrigens auch in IntelliJ15 auf. –

2

Entschuldigung, ich habe nicht genügend Reputation, um zu kommentieren, also muss ich es hier schreiben.

Wenn Sie das gewünschte Ergebnis erhalten möchten, können Sie vielleicht so versuchen.

scala> :paste 
// Entering paste mode (ctrl-D to finish) 

object test { 
    val obj = new MyObject(1) 
    println(obj.value) 
} 

class MyObject(x: Int) { 
    def value = x 
} 


// Exiting paste mode, now interpreting. 

defined object test 
defined class MyObject 

scala> test.obj 
1 
res4: MyObject = [email protected] 

, wenn Sie den Code einfügen, Test und MyObject werden nicht initialisiert, sicher können Sie einen beliebigen Druck nicht erhalten. test.obj wird dazu führen, dass der Test initialisiert wird, so dass obj, in der Zwischenzeit obj.value ebenfalls ausgewertet wird. Wenn Sie jedoch nichts dagegen tun (wie Print), ist es nur ein reiner Ausdruck.

+0

Dank. Ich suchte nach etwas, das schon im Arbeitsblatt war, ohne zur Scala-Konsole gehen zu müssen. – reectrix

5

Damit es wie in Eclipse funktioniert, aktivieren Sie den Modus "Eclipse-Kompatibilität". Dieser arbeitete für mich mit IntelliJ IDEA 2016.

Preferences>Language & Frameworks>Scala>Worksheet

Dann überprüfen Sie die Use "eclipse compatibility" mode Checkbox.

1

Nur kleine Änderung in der obigen Antwort, wie ich Präferenz Option in meinem Intellij Idee 16 (Idee-IC-163.12024.16) nicht gefunden habe. Schalten Sie einfach auf "eclipse Kompatibilität" Modus wie folgt:

Datei> Einstellungen> Sprache & Frameworks> Scala> Arbeitsblatt

Verwandte Themen