在IntelliJ中以交互模式打印Scala工作表结果

时间:2015-07-22 14:57:01

标签: scala intellij-idea read-eval-print-loop

由于某种原因,REPL控制台(工作表的右侧)没有打印出中间值

例如,这就是我所拥有的:

afterRendering

在REPL结果中,我只得到以下内容:

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

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

但是,我没有得到任何中间结果,例如我评估defined module test . . . defined class MyObject

我希望有类似的东西:

x.value
> MyObject@14254345 > 1

之后

为什么这不打印出来的原因?

4 个答案:

答案 0 :(得分:16)

在这种情况下最终为我工作的是什么(这可能是IntelliJ 14特有的,因为我已经看到它在Eclipse中以另一种方式工作)是我在对象块中添加了类,如下所示:

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

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

这会强制工作表中的REPL实例自动评估结果并在右侧打印出来。

答案 1 :(得分:8)

为了让它像在Eclipse中一样工作,打开" eclipse兼容性"模式。这对我使用IntelliJ IDEA 2016很有用。

Preferences> Language & Frameworks> Scala> Worksheet

然后,选中Use "eclipse compatibility" mode复选框。

答案 2 :(得分: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 = MyObject@1cd072a9

当您粘贴代码时,测试和MyObject未初始化,当然您无法获得任何打印。 test.obj将导致测试被初始化,因此obj,同时,obj.value也会得到评估。但是,如果你不喜欢它(比如打印),它只是一个纯粹的表达。

答案 3 :(得分:1)

上述答案中的修改很少,因为我在我的Intellij Idea 16(idea-IC-163.12024.16)中找不到Preference选项。只需打开" eclipse兼容性"模式如下:

档案>设置>语言与框架> Scala>工作表