Intellij 工作表 Scala 版本

Intellij Worksheet Scala Version

我有一个使用 Scala 2.12.12 的 sbt 项目。

使用工作表 (REPL),我决定检查 Scala 版本,并输入以下内容:

util.Properties.versionString

令我惊讶的是我得到了

res7: String = version 2.12.7

知道这怎么可能吗?

编辑1

有没有办法保证Worksheet的版本和sbt工程中设置的一样?我看错值了吗?

我不确定 2.12.7 的来源,但是如果您将 运行 类型从 REPL 更改为 plain,工作表将完全编译,使用 Scala build.sbt.

中定义的版本

引用自

Plain evaluation model compiles the whole worksheet in one go before evaluating expressions, whilst REPL evaluation model evaluates each expression on the go before moving to the next one.

这是你配置的地方:

这是结果:

Official answer from JetBrains:

Is there a way to ensure that the version of the Worksheet is the same as the one set in the sbt project? Am I looking at the wrong values?

工作表中实际使用的 scala 版本是 2.12.12(或模块中使用的任何版本)。 您可以验证,例如通过在工作表中使用一些特定于 2.13.3 的语法,例如 val x: 42 = 42.

Any idea how is that possible?

util.Properties.versionString 返回 2.12.7 的原因是我们的类加载器中的错误(类似于 SCL-9229)。 versionString 搜索 library.propertis 资源并从那里读取版本字符串。 由于该错误,Scala Plugins(2020.2 中的 2.12.7)本身的 scala 库资源泄漏到 REPL 实例。 错误已识别,修复正在进行中。