运行 intellij ide 和 eclipse 上的 scala 类

running scala classes on intellij ide and eclipse

我最近开始使用 scala 和 intellij ide 进行编程。虽然 运行 具有 classes 或特征的工作表我刚刚被定义 class classname 。 class 中的输出是不可见的。我是 运行 scala with sbt 和 java 8.I 甚至尝试 运行 在 eclipse 上使用相同的工作表仍然得到相同的输出

abstract class Base {
  def foo = 1

  def bar: Int
}

class Sub extends Base {

  def bar = 3
}

defined class Base

defined class Sub

IDE 中的工作表与 Scala REPL 中的工作表工作方式相同。

REPL 是如何工作的?它获取每个表达式或语句(通常是一行),对其求值并打印表达式或副作用的值。如果你定义一个 class,副作用是 class 是 compiled from Scala 到 Java 字节码并且可以使用。 REPL 通过 defined class Base 让你知道这个副作用。如果你输入一个表达式,它会将表达式从 Scala 转换为字节码,对其求值并打印结果。

如果你输入

class Foo { println("x") }

你得到 defined class Foo。如果你现在输入

new Foo()

工作表将打印 x(调用 Foo 的构造函数的副作用)和表达式 new Foo() 的值:res0: Foo = Foo@64c8e9cdres0= 部分通知您 REPL 自动执行的一件事 - 它将表达式分配给一个新的唯一变量 res0 以便您稍后可以使用它。


现在,为什么无法按预期打印 bar=3 ?这意味着您希望工作表将 class 的某种定义打印到输出中。这意味着将编译后的 Scala 代码翻译回 Scala 语言,但是在 Scala 中有很多方法可以编写相同的 class 定义!它根本无法以这种方式工作,并且在输出中再次重复您的 class 定义是没有意义的。