问题标签 [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.
intellij-idea - IntelliJ IDEA 2017.3.4 & Scala 编译服务器:IDE 无法连接到自己的本地服务器
我使用IntelliJ IDEA 2017.3.4作为Scala
IDE。
我已激活“ Build project automatically
”选项并将其设置Java 8 JDK
为默认项目 SDK。
Scala compiler server
正在运行并在端口43558上侦听。我无法更改此端口,我认为这会受到 IntelliJ IDEA 的随机影响。
当我修改我的 Scala 源代码时,IntelliJ IDEA 不使用Scala Compiler Server
以避免在稍作改动时重新编译许多类。由于这个原因,编译时间很长......
注意:我在 Linux 主机 64 位(Arch Linux)上运行
你知道我需要做什么Scala compiler server
吗?
scala - 如果 bound 是抽象类型成员,则具有上限的更高种类的类型构造函数不起作用
我想定义一个由上限R
和更高种类的类型构造函数参数化的特征,该构造函数F[_]
只接受R
. 我希望这个 trait 实现一个apply
可以将任何F[A]
转换为 的多态Unit
,前提是A <: R
.
这段代码工作得很好:
(见下文关于命名的备注)
R
现在,如果我通过将其声明为某个模块的类型成员来抽象它,并Fnctr[A <: R]
在该模块中定义,如下所示:
一切都中断了,我收到两条我不知道如何解释的错误消息:
我希望编译器能够识别出这三个内部ModuleImpl
都是相同的类型。CoCone[Domain, Fnctr]
Domain = AbstractDomain = R
我在这里遗漏了一些明显的东西,还是scalac
2.12.4 的限制?如果这是一个限制,有人曾经在任何地方报告过吗?
编辑发现类似的东西:问题#10186。是“一样的”吗?不一样”?如果它是一个错误,我应该将它作为另一个测试用例提出吗?如果有人可以确认这不完全是我的错,和/或它确实与相关问题密切相关,那将是问题的可接受解决方案。
Edit2:正如@Evgeny 指出的那样,它不能完全是问题10186,因为它在不同的编译器阶段(refchecks
而不是typer
)失败。
关于名称的备注:我在CoCone
这里将特征称为特征,类似于通常定义~>
的可以被视为自然转换的定义。在某种程度上,CoCone[Dom, Fctr]
类似于Fctr ~> Const_Unit
,但域F
仅限于 的子类型Dom
。实际上,它是可以通过网络发送某些子类CoCone[R, F]
的形状的东西,但这并不重要,所以我已经抽象了名称。这东西是一个比较普通的数学结构,没什么做作的,如果能编译出来就好了。F
R
scala - 当值类型具有不同数量的类型参数时如何覆盖值?
为什么这愉快地编译,
虽然这没有?
有解决方法吗?谢谢。
scala - 在 Scala 编译器插件中访问文档注释
我想从typer
阶段后运行的 Scala 编译器插件访问文档注释。
scala.tools.nsc.Global
extends DocComments
,所以我认为它就像调用一样简单,global.cookedDocComment(symbol)
但即使对于有注释的符号,它也会返回空字符串。
然后我查看了docComments
地图的更新位置:主要位置在交互式编译器的
所以我尝试添加以下遍历器:
我可以验证遍历器是否被调用,但它从未遇到过DocDef
.
编辑:我有一个部分解决方法(评论解释了为什么它只是部分的,我仍然非常想要一个更好的选择):
symbolMap
我的插件的一部分在哪里。
scala - 如何将类型绑定到我的 Scala 解释器中?
我正在尝试将值绑定到具有来自外部库的类型的解释器中。
这就是我目前声明我的解释器的方式:
但是,当我执行我的代码时,我在运行时收到此错误:
我还试图将我声明的对象包含在解释器的范围内,但我不确定我会如何做到这一点。任何帮助,将不胜感激!
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
导入,因为我实际上并没有使用它。但它会绊倒人们,因为他们倾向于这样做:
从编译时常量自动转换为精炼类型,当他们可能只是逃避:
scala - 为什么用模式匹配收集不能缩小特定的类?
让我们考虑以下特征:
我试图将collect
集合限制为特定的子类。
如果我尝试collect
匹配单个组件并重新组装元组:
编译器很高兴,但如果尝试返回完全匹配:
事情变得丑陋:
为什么 Scala 编译器无法处理第二种情况?
java - 如何在运行时从 java 程序编译和运行 scala 代码?
我已经有一个使用 JavaCompiler api 在运行时编译 Java 代码的程序。我可以对 scala 代码使用相同的编译器吗?如果不是,那么在 Java 程序中编译 scala 代码的最佳方法是什么?
谢谢
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)
scala - 什么可能导致以下运算符重载以交换操作数?
我正在使用 scala 语言来定义 2 个运算符::++
并且++:
作为彼此的精确镜像: a :++ b == b ++: a
,它们显然不是可交换的: a :++ b != a ++: b
。
这是我用于测试的 scala 代码:
第一个测试看起来一切都很好,但是在运行时出现以下错误:
从打印的消息看来,scala 覆盖了我的运算符并自行反转操作数,是什么可能导致 scala 编译器以这种方式运行?它是一个错误吗?
我正在使用最新的 scala 2.11 和最新的 Java 8u181 进行测试。