1

我有一个sbtScala 2.12.12 的项目。

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

util.Properties.versionString

令我惊讶的是,我得到了

res7: String = version 2.12.7

知道这怎么可能吗?

编辑1

有没有办法确保 Worksheet 的版本与 sbt 项目中设置的版本相同?我在看错误的价值观吗?

4

2 回答 2

2

我不确定 2.12.7 来自哪里,但是如果您将运行类型从 更改REPLplain,工作表将被完全编译,Scala 版本在您的build.sbt.

引用Intellij Scala 工作表运行类型差异说明

简单的评估模型在评估表达式之前一次性编译整个工作表,而 REPL 评估模型在移动到下一个之前评估每个表达式。

这是您配置的地方:

在此处输入图像描述

这是结果:

在此处输入图像描述

于 2020-11-15T07:41:56.830 回答
1

JetBrains 的官方回答

有没有办法确保 Worksheet 的版本与 sbt 项目中设置的版本相同?我在看错误的价值观吗?

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

知道这怎么可能吗?

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

于 2020-11-19T23:14:18.970 回答