Scala工作表不会在IntelliJ IDEA 2016.2中评估对象

ddi*_*hev 2 scala intellij-idea

这个非常简单的工作表内容演示了这个问题:

object Test {
 println("This does not print!")
  add(5, 6)
}

println("This however prints!")
add(5, 6)

def add(a: Int, b: Int): Int = a + b
Run Code Online (Sandbox Code Playgroud)

上述工作表内容的结果如下:

defined module Test

This however prints!
res0: Unit = ()
res1: Int = 11

add: add[](val a: Int,val b: Int) => Int
Run Code Online (Sandbox Code Playgroud)

基于JetBrains官方网站Scala Worksheets示例和我发现的所有其他可靠资源(如Martin Odresky自己在Scala课程中的函数编程中的示例),我希望object Test执行的内容.我的软件是:

  • OS X El Capitan
  • IntelliJ IDEA 2016.2
  • SBT插件1.8.0
  • SBT版本0.13.12
  • Scala插件2016.2.1
  • Scala版本2.11.8

Sma*_*guy 12

我能够通过更改 Scala 工作表设置来评估 Scala 工作表。

  • 将运行类型更改为普通(原来是 REPL)

您可以通过单击 Scala 工作表上的设置图标来访问设置。


Sam*_*mar 5

如果所有代码都在该对象内部,则scala工作表将执行对象test {....}的内容。如果对象之外有一些代码,它将仅定义该Test对象(而不运行它)。

object Test {
  println("This does not print!")
  def add(a: Int, b: Int): Int = {print("Sum:" + a + b); a + b}
  add(2, 2)
}

// defined the above Test object

Test // executes the Test object
Run Code Online (Sandbox Code Playgroud)


Jat*_*tin 5

我想这就是你想要的:

object Test {
  println("This does not print!") 
  add(5, 6)

  println("This however prints!")
  add(5, 6)

  def add(a: Int, b: Int): Int = a + b
}
Run Code Online (Sandbox Code Playgroud)

工作表的工作原理是,如果您定义一个对象而没有在object范围外定义任何内容,它将执行它Test extends App.这是intellij页面显示的内容

如果在object范围之外有任何语句,则将其视为任何其他语句object,编译器将像其他任何语句一样初始化它.这就是您所经历的.