问题标签 [scala-3]
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.
scala - IntelliJ 突然停止突出显示 Scala/Dotty 项目中的错误
TLDR;IntelliJ 没有突出显示我的 Scala 项目中的任何错误(语法/类型不匹配)。我已经尝试过类型感知突出显示,将突出显示级别设置为“检查”,并根据 StackOverflow 答案启用“实验功能”,然后重新加载项目。
我有一个在 IntelliJ 2019.3 中运行良好的 Scala 2.13 项目 (sbt)。在那之后我做了一些更改(我没有检查它是否编译,并且它有几个错误)然后我决定将它移植到 Dotty(并将 IntelliJ 更新到 2020.1 EAP)。我创建了一个新的 Dotty 项目,显然没有错误。
然后我将所有源文件复制到这个项目并修改了 build.sbt 文件。当我这样做时,我可以看到一些语法错误突出显示,并且given
关键字未被检测为关键字,很可能是因为插件认为该语言应该是 Scala 2,而不是 Scala 3。
之后,我从 sbt 导入项目,错误的语法错误消失了,所以我很高兴地关闭了该文件并开始修复其他文件。我不确定错误突出显示最初是否有效然后关闭,或者它是否从未有效。过了一会儿,我意识到未解析的引用没有突出显示——例如,当我拼错了一个类名并试图去声明时,它没有做任何事情,尽管当我更正它时,它可以解析引用,大概是因为那是没有错误的文件之一。然后我看到语法错误也没有被识别。
我启用了类型感知突出显示,并且突出显示级别设置为检查。我正在使用带有 Scala 插件版本 2020.1.977 (EAP) 的 IntelliJ 2020.1 EAP。build.sbt 包含 scala 版本“0.23.0-RC1”。IntelliJ 没有运行任何其他进程,当时我的计算机上也没有任何资源密集型程序。
我在右下角收到多条错误消息,例如
java.lang.AssertionError: assertion failed
(几次)com.intellij.psi.PsiInvalidElementAccessException: Element: class org.jetbrains.plugins.scala.lang.psi.impl.statements.params.ScTypeParamImpl #Scala because: different providers: org.jetbrains.plugins.scala.lang.psi.ScFileViewProvider{vFile=file:<The path>/Pattern.scala, content=VirtualFileContent{size=1716}, eventSystemEnabled=true}(a24437); org.jetbrains.plugins.scala.lang.psi.ScFileViewProvider{vFile=file:<Same path>/Pattern.scala, content=VirtualFileContent{size=1716}, eventSystemEnabled=true}(b39181a) invalidated at
(这个出现了好几次)
我感觉这只是 Dotty 的一个错误,很快就会解决。Scala Nightly 插件有类似的行为,这就是为什么我切换到 EAP 并创建了一个全新的项目,我认为它的错误会更少。任何建议将不胜感激。
当我在 IntelliJ 2020.1 EAP 但不是在 2019.3 中打开它时,我的旧 Scala 2 项目也发生了同样的事情。现在看来,这不是 Dotty 特有的东西。
scala - dotty/scala3 与 scala-native 和 scala-js 等技术的无缝集成如何?
我们应该注意哪些限制?它会要求我们使用一些类似 scalafix 的工具吗?还是开箱即用?
scala - Scala / Dotty - 将特征混合到现有对象中
有没有办法将特征混合到 Dotty 或 Scala 中的现有对象中?
这个答案提供了一个宏观解决方案,但它已经 7 岁了,我希望(手指交叉!)更简单的东西。
scala - 无法重写递归调用:它不在尾部位置
我一直在玩 Dotty 并尝试实现一个简单的 List。这就是我实现它的方式:
我遇到的问题是这个实现无法编译Cannot rewrite recursive call: it is not in tail position
:
在另一个文件上,我尝试了相同的实现,使用标准库的列表,它编译:
也许我只是累了,没有看到明显的错误,但也许这里还有别的东西?extends List[Nothing]
我必须添加以使代码编译引起的任何奇怪之处?
谢谢!
编辑:
scala - 更新 Dotty 中数组给定索引处的元素(未来的 Scala3)
在 scala2 中:
更新操作有效, arr 变为:
但是在dotty中:
我发现 arr 没有改变
在 dotty 中,当我尝试通过 for 表达式更新数组的每个元素时:
神奇的是,它改变了:
我很困惑为什么 val 数组不能在 for 表达式中更新到位,它可以工作。
scala - 联合类型 LUB 和超类型 LUB 之间的区别
形状列表推断为,List[Shape]
但盒装形状列表推断为List[Box[Square | Circle]]
为什么res0
不键入与List[Square | Circle]
对称List[Box[Square | Circle]]
,反之亦然?
Dotty根据联合类型定义最小上限
一组类型的最小上界 (lub) 是这些类型的并集。这取代了Scala 2 规范中最小上限的定义。
与此变化相关的统一规则是什么?
scala - Dotty/Scala 3 中的结构类型编译失败?
我测试了以下结构类型的代码:
它在 Scala 2.13.2 中成功编译,但在 Dotty/Scala3 中失败。如何在 Dotty/Scala3 中使用结构类型?谢谢!
scala - 我可以在运行时和编译时两种模式下重用宏代码吗?
我可以使用dotty
宏分段来解析字符串、生成代码并在运行时运行它吗?
我正在考虑构建一种可以以不同方式使用的模式和 Web 查询语言:通过 REST 传递,或者在编译时静态构造和验证。这将需要两种操作模式(运行时/编译时)并能够在两种模式下重用部分宏代码。
从我对dotty lang的第一次分析来看,它看起来是可行的;但是,我还没有看到任何使用函数签名解析字符串的方法,如String => Expr[?]
. 这可能吗?
此外,这些宏是否有能力改变 scala 代码语义?例如,我想做这样的事情,直接在 scala 代码中:
我也应该能够使用字符串执行相同的查询:
scala - 使用像猫这样的库是否会使升级到 dotty 或多或少变得困难?
如果我在我的 scala 项目中使用猫,迁移到 dotty 会更容易还是更困难?我不太确定使用这样的库的后果以及最终迁移到 dotty 的难度。