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

Print out Scala worksheet results in interactive mode in IntelliJ

出于某种原因,中间值未在 REPL 控制台(工作表右侧)中打印出来

例如,这是我的:

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

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

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

defined module test
.
.
.
defined class MyObject

但是,我没有得到任何中间结果,例如当我评估 x.value

我希望是这样的:

> MyObject@14254345
> 1 

x.value

之后

为什么没有打印出来?

对不起,我没有足够的声誉来发表评论,所以我不得不写在这里。

如果你想得到你想要的结果,也许你可以这样尝试。

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

粘贴代码时,test和MyObject都没有初始化,肯定打印不出来。 test.obj 将导致测试被初始化,因此 obj 也会被初始化,同时,obj.value 也会被评估。但是,如果你不做任何事情(比如打印),它只是一个纯粹的表达。

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

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

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

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

要使其像在 Eclipse 中一样工作,请打开 "eclipse compatibility" 模式。使用 IntelliJ IDEA 2016 这对我有用。

Preferences > Language & Frameworks > Scala > Worksheet

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