【问题标题】:Scala worksheet does not evaluate object in IntelliJ IDEA 2016.2Scala 工作表不评估 IntelliJ IDEA 2016.2 中的对象
【发布时间】:2017-01-22 01:57:55
【问题描述】:

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

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

上述工作表内容的结果是:

defined module Test

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

add: add[](val a: Int,val b: Int) => Int

基于JetBrains official website Scala Worksheets example 和我发现的所有其他可靠资源(如Martin Odresky's own examples in Functional Programming in Scala course),我希望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

【问题讨论】:

  • I would expect the contents of object Test to execute 我不希望它执行。工作表是花哨的repl。我从没想过 repl 会这样做
  • 好吧,我找到的所有示例(包括 JetBrains 网站本身的页面)都显示工作表完全可以这样工作。我已将其添加到我的答案中。
  • 显然 IntelliJ 和视频之间的不同行为是由于视频中在 Eclipse 中运行的代码(请参阅 Coursera 论坛中有关此问题的问题:工作人员建议在单例之外运行代码scala 工作表中的对象)。

标签: scala intellij-idea


【解决方案1】:

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

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

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

【讨论】:

  • 对我不起作用:我遇到与 OP 相同的问题,即使在“在编译器进程中运行工作表(仅限纯模式)”上检查了 Scala 工作表设置。我正在 Windows 10 上使用 IntelliJ CE 2020.1.1、Scala 2.12.10 和 sbt 1.3.10。
【解决方案2】:

我想这就是你想要的:

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
}

工作表的工作原理是,如果您定义了一个对象并且在object 范围之外没有定义任何内容,它将以Test extends App 执行它。 intellij 页面显示的是什么

如果您有任何在object 范围之外的语句,那么它将被视为任何其他object 并且编译器将像其他任何东西一样初始化它。这就是你正在经历的。

【讨论】:

  • 完美,谢谢您的回答!我将如何执行已定义的对象(我相信它是单例的)?
  • 你可以通过使用它的名字来执行:Test
  • object 的主体只是构造函数主体。所以第一次调用的时候,body 会在类加载器加载的时候执行。随后,下次就不会调用构造函数初始化了。
【解决方案3】:

如果所有代码都在该对象内,则 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-20
    • 2019-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多