问题标签 [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 - 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 的难度。
scala - 有没有办法使用 Gradle 中的 Scala 3 编译器(Dotty)?
我对 Gradle 和 Dotty 都很陌生(对 Scala 整体来说还是比较新的)。我能够像这样使用 Gradle 创建一个 Scala 项目:
而且我知道 Dotty 可以与 SBT 一起使用。但是有没有办法将 Dotty 与 Gradle 连接起来(还)?
scala - scala 3.0 中是否支持静态中缀表示法?
在查看 Dotty 的 (Scala 3.0)运算符规则时,我注意到以下@alpha
注释示例:
此示例旨在说明如何显式设置方法在具有 java 不允许的字符时将被编译的名称,但它似乎也表明了一种定义静态中缀方法的新方法,据我所知到这一步是不可能的。
当我尝试:
我的编译器告诉我迷路。
这是一个新功能吗?我希望如此,因为我希望能够编写静态中缀函数而不求助于隐式转换。
如果这是 3.0 的新功能,为什么在操作员规则部分(或其他任何地方)没有提到它?
scala - 如何在dotty宏中访问案例类的参数列表
我正在尝试在 dotty 中学习元编程。专门编译时代码生成。我认为通过构建一些东西来学习将是一个好方法。所以我决定制作一个 CSV 解析器,它将行解析为案例类。我想使用 dotty 宏来生成解码器
我已经为Int
&提供了基本的解码器String
,现在我正在寻找def make[T:Type]
方法的指导。如何T
在此方法中迭代案例类的参数列表?有没有推荐的方法或模式来做到这一点?
scala - 如何使用匹配类型实现 SKI 组合器演算?
我试图使用匹配类型在 Dotty 中实现SKI 组合器演算。
SKI 组合微积分的简要说明:
S
,K
, 和I
是项(xy)
is an term ifx
andy
are terms and is like 函数应用(((Sx)y)z)
(same asSxyz
) 返回xz(yz)
(same as(xz)(yz)
)((Kx)y)
(相同Kxy
)返回x
(Ix)
返回x
以下是我使用R
的(尽可能减少术语)。一个术语(xy)
被写成一个元组(x,y)
, 和S
, K
, 和I
是特征。
但是,以下 2 行无法编译(出于相同的原因)(Scastie):
该错误说它需要(K,K)
但找到R[((I, K), (I, K))]
。我希望它首先看到 S 并将其变成(IK)(IK)
,或者R[((I,K),(I,K))]
,之后它应该匹配第一个的评估(I, K)
并看到它是K
,这与(I, K)
使其返回R[(R[(I,K)], R[(I,K)])]
,它成为R[(K,K)]
,它成为正义(K,K)
。
然而,它并没有超越R[((I,K),(I,K))]
。显然,如果它是嵌套的,它不会减少术语。这很奇怪,因为我尝试了相同的方法,但使用了实际的运行时函数,而且它似乎工作正常(Scastie)。
正如预期的那样,来自println(r((((S, I), I), K)))
的输出。(K,K)
有趣的是,删除它的规则K
让它可以编译,但它不能识别(K, K)
和R[(K, K)]
作为同一类型。也许这就是导致问题的原因?(斯卡斯蒂)
scala - Dotty 如何决定如何推断/何时扩大联合类型?
扩大联合类型已在此处讨论,但我似乎无法找到以下案例的答案
让我们从以下内容开始
这个异构列表的推断List[Any]
就像在 Scala 2 中一样
然而以下
被推断为List[scala.collection.immutable.AbstractSeq[Int | String]]
这是相当令人困惑的行为。为什么在一种情况下推断出两种不相交类型的 LUB,Any
而在另一种情况下推断出联合类型?
如果这只是一个设计决策,是否有任何应该注意的情况?
scala - 这个异常“dotc:错误的符号引用”是什么意思。
我想使用Scala 3并使用一些现有的库。该示例适用于 Scala 2.13。
编译时出现此异常:
这是我的build.sbt
更新 好的,它适用于2.12,使用2.13我收到以下错误: