问题标签 [dotty]
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 - 给定关键字在 Scala 3 或 dotty 中如何工作?
我正在浏览 Scala 3 文档。他们引入了given
关键字,它被认为是 Scala 2 的替代品implicit
。代码在这里
我在这里很困惑,下面的代码中发生了什么:
Ord[T]
它是在given
关键字还是其他东西中实例化?
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 规范中最小上限的定义。
与此变化相关的统一规则是什么?