2015-07-22 1 views
13

По какой-то причине, промежуточные значения не печатаются в консоли REPL (правая сторона листа)Распечатайте Scala результатов рабочего листа в интерактивном режиме в IntelliJ

Например, это то, что у меня есть:

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

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

В результатах Отв я только получаю следующее:

defined module test 
. 
. 
. 
defined class MyObject 

Однако, я не получаю какой-либо из промежуточных результатов, например, когда я оцениваю x.value

Я бы ожидать что-то вроде:

> [email protected] 
> 1 

после x.value

Любая причина, почему это не распечатывая?

ответ

15

Что в конечном итоге работает для меня в этом случае (и это может быть особенно интересно для IntelliJ 14, так как я видел, как он работает в Eclipse), я добавил класс внутри блока объектов, например:

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

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

Это вынудило экземпляр REPL внутри листа, чтобы автоматически определить результат и распечатать его с правой стороны.

+1

Спасибо за вашу помощь, поскольку я искал разрешение с одного дня. Но, будучи новичком в Scala, я не понимаю, почему это происходит, поскольку я считаю, что он работает в Eclipse. Кстати, эта проблема и в IntelliJ15 тоже. –

2

Извините, у меня недостаточно репутации для комментариев, поэтому я должен написать его здесь.

Если вы хотите получить нужный результат, возможно, вы можете попробовать это.

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] 

при вставке кода, тестирования и MyObject не инициализируются, конечно, вы не можете получить любую печать. test.obj приведет к инициализации теста, так что obj, в тоже время, obj.value также получит оценку. Однако, если вы ничего не знаете (например, печать), это просто чистое выражение.

+0

Спасибо. Я искал что-то, что уже было на листе, без необходимости идти на консоль Scala. – reectrix

5

Чтобы он работал, как в Eclipse, включите режим совместимости с затмением. Это работает для меня с помощью IntelliJ IDEA 2016 года

Preferences>Language & Frameworks>Scala>Worksheet

Затем проверьте Use "eclipse compatibility" mode флажок.

1

Просто небольшая модификация в вышеприведенном ответе, поскольку я не нашел опцию Preference в моей Intellij Idea 16 (idea-IC-163.12024.16). Просто включите "затмить совместимость" режим, как показано ниже:

Файл> Настройки> Язык & Каркасы> Scala> Worksheet