问题标签 [scala-compiler]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1429 浏览

intellij-idea - IntelliJ IDEA 2017.3.4 & Scala 编译服务器:IDE 无法连接到自己的本地服务器

我使用IntelliJ IDEA 2017.3.4作为ScalaIDE。

我已激活“ Build project automatically”选项并将其设置Java 8 JDK为默认项目 SDK。 在此处输入图像描述

下图,Scala compiler server配置 在此处输入图像描述

Scala compiler server正在运行并在端口43558上侦听。我无法更改此端口,我认为这会受到 IntelliJ IDEA 的随机影响。

在此处输入图像描述

当我修改我的 Scala 源代码时,IntelliJ IDEA 不使用Scala Compiler Server以避免在稍作改动时重新编译许多类。由于这个原因,编译时间很长......

我收到以下错误: 在此处输入图像描述

注意:我在 Linux 主机 64 位(Arch Linux)上运行

你知道我需要做什么Scala compiler server吗?

0 投票
1 回答
397 浏览

scala - 如果 bound 是抽象类型成员,则具有上限的更高种类的类型构造函数不起作用

我想定义一个由上限R和更高种类的类型构造函数参数化的特征,该构造函数F[_]只接受R. 我希望这个 trait 实现一个apply可以将任何F[A]转换为​​ 的多态Unit,前提是A <: R.

这段代码工作得很好:

(见下文关于命名的备注)

R现在,如果我通过将其声明为某个模块的类型成员来抽象它,并Fnctr[A <: R]在该模块中定义,如下所示:

一切都中断了,我收到两条我不知道如何解释的错误消息:

我希望编译器能够识别出这三个内部ModuleImpl都是相同的类型。CoCone[Domain, Fnctr]Domain = AbstractDomain = R

我在这里遗漏了一些明显的东西,还是scalac2.12.4 的限制?如果这是一个限制,有人曾经在任何地方报告过吗?

编辑发现类似的东西:问题#10186。是“一样的”吗?不一样”?如果它是一个错误,我应该将它作为另一个测试用例提出吗?如果有人可以确认这不完全是我的错,和/或它确实与相关问题密切相关,那将是问题的可接受解决方案。

Edit2:正如@Evgeny 指出的那样,它不能完全是问题10186,因为它在不同的编译器阶段(refchecks而不是typer)失败。


关于名称的备注:我在CoCone这里将特征称为特征,类似于通常定义~>的可以被视为自然转换的定义。在某种程度上,CoCone[Dom, Fctr]类似于Fctr ~> Const_Unit,但域F仅限于 的子类型Dom。实际上,它是可以通过网络发送某些子类CoCone[R, F]的形状的东西,但这并不重要,所以我已经抽象了名称。这东西是一个比较普通的数学结构,没什么做作的,如果能编译出来就好了。FR

0 投票
2 回答
621 浏览

scala - 当值类型具有不同数量的类型参数时如何覆盖值?

为什么这愉快地编译,

虽然这没有?

有解决方法吗?谢谢。

0 投票
0 回答
78 浏览

scala - 在 Scala 编译器插件中访问文档注释

我想从typer阶段后运行的 Scala 编译器插件访问文档注释。

scala.tools.nsc.Globalextends DocComments,所以我认为它就像调用一样简单,global.cookedDocComment(symbol)但即使对于有注释的符号,它也会返回空字符串。

然后我查看了docComments地图的更新位置:主要位置在交互式编译器的

所以我尝试添加以下遍历器:

我可以验证遍历器是否被调用,但它从未遇到过DocDef.

编辑:我有一个部分解决方法(评论解释了为什么它只是部分的,我仍然非常想要一个更好的选择):

symbolMap我的插件的一部分在哪里。

0 投票
2 回答
141 浏览

scala - 如何将类型绑定到我的 Scala 解释器中?

我正在尝试将值绑定到具有来自外部库的类型的解释器中。

这就是我目前声明我的解释器的方式:

但是,当我执行我的代码时,我在运行时收到此错误:

我还试图将我声明的对象包含在解释器的范围内,但我不确定我会如何做到这一点。任何帮助,将不胜感激!

0 投票
0 回答
81 浏览

scalatest - 使用 scalatest MustMatchers 和 Await 改进的 Scala 2.11 导致编译器错误“尝试执行类型变量的 lub/glb ?F[?T,?B]”

我一直在尝试使用精炼的 scalatest 并且在“typer”阶段遇到编译器错误:trying to do lub/glb of typevar ?F[?T, ?B]

这是我使用独立的菊石脚本对问题进行极简再现的最佳尝试:

如果您对上述内容进行以下任何一项更改,它将成功编译:

  • 删除:import eu.timepit.refined.auto.autoInfer
  • 删除:with MustMatchers从类定义中
  • 删除:Await.result(fut, atMost = duration)

澄清一下,这是一个编译错误,而不是运行时错误。在 sbt 中运行时,最初的错误发生在 play 应用程序(scala 2.11.11)test:compile中,但使用 ammonite 脚本可能更容易重现它。

我使用的菊石版本提供了版本信息:

安装使用:


ammonite 示例中的更多错误详细信息:

从 play sbttest:compile我也得到这种输出:


这不是一个严重的问题,因为我可以删除autoInfer导入,因为我实际上并没有使用它。但它会绊倒人们,因为他们倾向于这样做:

从编译时常量自动转换为精炼类型,当他们可能只是逃避:

0 投票
3 回答
565 浏览

scala - 为什么用模式匹配收集不能缩小特定的类?

让我们考虑以下特征:

我试图将collect集合限制为特定的子类。

如果我尝试collect匹配单个组件并重新组装元组:

编译器很高兴,但如果尝试返回完全匹配:

事情变得丑陋:

为什么 Scala 编译器无法处理第二种情况?

0 投票
1 回答
246 浏览

java - 如何在运行时从 java 程序编译和运行 scala 代码?

我已经有一个使用 JavaCompiler api 在运行时编译 Java 代码的程序。我可以对 scala 代码使用相同的编译器吗?如果不是,那么在 Java 程序中编译 scala 代码的最佳方法是什么?

谢谢

0 投票
1 回答
212 浏览

java - 从Java程序编译scala代码时出现异常

我有以下代码在运行时在 Java 程序中编译 scala 代码

但我收到此错误:

线程“主”java.lang.NoSuchMethodError 中的异常:scala.tools.nsc.Global$gen$.mkBlock(Lscala/collection/immutable/List;)Lscala/reflect/internal/Trees$Tree; 在 scala.tools.nsc.ast.parser.TreeBuilder.makeBlock(TreeBuilder.scala:110) 在 scala.tools.nsc.ast.parser.Parsers$Parser.block(Parsers.scala:1689)

0 投票
1 回答
63 浏览

scala - 什么可能导致以下运算符重载以交换操作数?

我正在使用 scala 语言来定义 2 个运算符::++并且++:作为彼此的精确镜像: a :++ b == b ++: a,它们显然不是可交换的: a :++ b != a ++: b

这是我用于测试的 scala 代码:

第一个测试看起来一切都很好,但是在运行时出现以下错误:

从打印的消息看来,scala 覆盖了我的运算符并自行反转操作数,是什么可能导致 scala 编译器以这种方式运行?它是一个错误吗?

我正在使用最新的 scala 2.11 和最新的 Java 8u181 进行测试。