问题标签 [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.

0 投票
1 回答
53 浏览

scala - 使用依赖类型扩展

这是我的问题的最小再现:

如您所见,我正在尝试将 Key 的静态已知类型编码到类型参数中。这不像我可以将类型key作为 A 的类型参数,因为在我的真实示例中,它更像,class A(using g: blablah)(val key: g.Key) extends SuperClass[g.Mapping[key.type]]但这与上述问题无关。

只是我们不能在超类的参数中使用依赖类型吗?

更新

类型成员的编码产生相同的错误:

我仍然得到

0 投票
1 回答
125 浏览

scala - Scala 3 中枚举的不变默认类型

Scala 3 现在改进了定义 ADT 的方法。一种语法糖,可以消除以通常sealed trait方式进行操作的所有麻烦。

所以我会用一个例子来解释我的问题

在这种情况下Option1Option2是 type Adt[Nothing],因为类型参数A是协变的。

如果枚举是逆变的,它们将是 type Adt[Any]

但如果它是不变的呢?

0 投票
0 回答
266 浏览

scala - 隐式解析不再适用于 Scala 3 (Pure Config)

在我的 Scala 3 项目中,我想使用 Pure Config。但我得到以下异常:

我只是从文档中举了一个简单的例子:

我的build.sbt样子是这样的:

我错过了什么还是目前不可能?

0 投票
1 回答
81 浏览

scala - 除了隐式之外,有没有办法在 Scala 3 中拉皮条?

有没有办法在scala 3中拉皮条?(因为隐含将在 scala 3 中被删除)那么有没有办法使用“给定和使用”来做到这一点?

在scala 2中,我通常会做这样的事情:

0 投票
2 回答
153 浏览

scala - scala3 扩展方法类型参数

这是我的 scala2 代码到 scala3 的直接翻译

我需要在调用站点指定窄操作的类型,但是扩展方法不允许该语法。这个限制有什么最好的解决方法?

这样做的目的是能够缩小集合/尝试/任何东西中的类型。窄类型类将对内部的任何内容进行平面映射,比较运行时类型,如果它匹配将 B 包装在 F 中,或者返回一个空 F

0 投票
1 回答
376 浏览

scala - Scala 3(Dotty)模式将函数与宏引用匹配

我正在尝试通过 Scala 3.0.0-M2 中的宏获取函数名称我想出的解决方案使用TreeAccumulator

调用此代码时,会生成函数的名称:

我想知道这是否可以使用引号以更简单的方式完成。

0 投票
2 回答
878 浏览

scala - Scala 2 隐式和 Scala 3 给定/使用之间的区别

implicitScala 2 中的关键字和Scala 3 中的given+有什么区别using?只是implicit被分成了两个关键字,还是语义也不同,如果是,如何?

0 投票
0 回答
85 浏览

scala - dotty / scala3 将映射的元组类型取消映射到其组成类型

我无法将映射的元组映射到其组成类型。如何以类型安全的方式实现read方法Impl[T]?目前我只是用Tuple.toArray/Tuple.fromArray

编辑(1):添加非类型安全代码

编辑 (2):当前不完整的尝试 - 包含 PolyFunction 错误

0 投票
1 回答
190 浏览

scala - quasiquote 是否从 scala 3 中删除?

我正在阅读有关 Scala 3 的元编程手册,但没有找到我在当前项目中大量使用的 quasiqotes。像这样解构树的替代方法是什么:

如何通过树解构将此类代码移植到 Scala 3?

0 投票
1 回答
64 浏览

scala - 使用新的主函数语法检查 args

使用新的主函数语法时:

@main def prog(nb: Int, stuff: String) = ...

与旧的:

def main(args: Array[String]) = ...

是否可以检查命令行上传递的参数数量?我们可以用旧语法对 args.length 进行测试。

我想生成一个自定义的语法错误,而不是“非法命令行:需要更多参数”。