问题标签 [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 回答
1795 浏览

scala - 将 Scala 3.0 SDK 添加到 IntelliJ

目前,dotty 编译器发布了它的第一个候选版本,并将在未来几个月内发布。我将 IntelliJ scala 插件更新为 EarlyAccess 以使其与 Scala 3.0 一起使用,它的语法高亮问题已解决,但仍然存在 IntelliSense 问题,建议仅为 scala 2.13 API,它不知道 Scala 3.0 API 和它很难发展。我尝试手动添加 Scala 3.0 SDK,但它不接受它(因为新版本中的编译器 jar 文件名已更改)。

在此处输入图像描述

是否有可能将 Scala 3.0 SDK 添加到 IntelliJ?

0 投票
0 回答
155 浏览

scala - Scala3中基于通配符的存在类型

Scala 3 文档中所述,不能用通配符表示的存在类型通常会被删除。这是我的代码

斯卡拉 2

演示

斯卡拉 3

尝试使用通配符在 Scala 3 中重写它:

演示

文档就是这么说的

仍然支持可以仅使用通配符(但不是 forSome)表示的存在类型,但被视为精炼类型

问题:为什么我的示例不起作用。有没有办法让它工作?

0 投票
1 回答
128 浏览

scala - 如何在 Scala 3 中声明并将参数传递给隐式参数?

我在scala 2中有这个代码

这里 x对函数的参数进行了count注释,implicit因此它可以double隐式传递给函数。Scala 3在使用给定使用/召唤时如何做到这一点?

0 投票
1 回答
109 浏览

scala - 在 Scala 3 中提取元组的子集

给定一个任意元组,我想提取元组的一个子集。签名看起来像:

whereT2是一个元组,其中包含从 中选择的一些成员子集T1

使用它看起来像

我知道这需要大量使用匹配类型和类型级编程。我觉得使用 Shapeless 非常简单,但我在元组与 HLIST 的标准库中缺少一些功能。

0 投票
1 回答
136 浏览

scala - Scala 3 (Dotty) 中命名给定/使用对象的语法

是否有一种单行方式来提供对一个值的命名using引用,该值在没有即将被弃用的implicit关键字的情况下隐式可用(即通过语法可用)?根据文档,我希望以下工作(在 SBT 下,scalaVersion := "3.0.0-M2"

但这失败了

现在:我可以通过多种方式解决这个问题,但要么文档令人困惑(或错误),要么我误解了一些相当基本的东西。

解决方法 1(如此建议):

但我希望能够用一个表达式而不是两个表达式来做到这一点。相同的注释适用于先定义给定,然后将其绑定到名称:

特别是因为我认为implicitly将在 3.1 中弃用并在 3.2 中消失。

我们还可以将给定对象的调用包装在函数中来解决这个问题:

但这对我来说似乎是样板。

0 投票
1 回答
68 浏览

scala - 方法在语义上是否等同于 Scala 3 中的函数?

在此处解释的Scala 2中,我们有一个实现 trait的函数类型FunctionX和一个非值类型的方法类型。我们可以将一个方法转换为方法值,它是函数类型的一个实例,如下所示:

现在在 Scala 3 中,我们可以保留下划线,让它看起来更像这样:

等号不是表示方法和函数值的语义等价val methodValue = method吗?同样在 Scala 2 中,我不能在创建的方法上使用任何方法(至少在具有 Scala 版本 2.13.5 的 Scastie 中),但在 Scala 3 中,我可以这样做,表明 Scala 3 中的方法是常规对象:

那么 Scala 3 的函数和方法是相同还是非常相似的对象,或者至少差异已经显着减少?

0 投票
1 回答
317 浏览

scala - 通过在 Scala 3 中展开类型将案例类转换为另一个案例类

我有一个表示容器和两个案例类的枚举:

我想在 Scala 3 中编写一个通用函数,将所有案例类转换为类似PersonTemplate的对应类Person,例如:

我尝试了几种方法,但都没有成功,主要是因为我不明白如何使用 Scala 3 Tuple,它在我看来与 Scala 2 Shapeless 不同HList(即使在无形中我也不是那么好)。

我的总体方法是:

  1. 在元组中转换案例类。为此我发现Tuple.fromProductTyped
  2. 将每个元素约束为Container[_]. 我发现Tuple.IsMappedBy保证元组具有正确的形状,Tuple.InverseMap并且似乎提取了容器内的类型。不过,我不确定将这段代码放在哪里。
  3. 将(poly?)函数应用于调用的每个值Container.get。由于我在网上发现的一点点,我最终使用了很多,.asInstanceOf这对我来说似乎不合适。
  4. 使用将结果转换Tuple为输出类型summon[Mirror.Of[O]].fromProduct(output)

为了完整起见,这是我尝试的最后一个代码,当然不起作用:

0 投票
0 回答
202 浏览

scala - 在 Scala 3 中区分联合类型和类型参数

在 Scala 3 中,给定这样一个类型别名:

我如何区分我有两种情况中的哪一种(AOption[A])?

在尝试编写代码时,我认为主要问题在于编译器和类型,包括Either[String, B], matches A`。我什至不知道我的问题是否有惯用的解决方案。

这是我最好的尝试,任何一个都失败了:

如您所见value,不识别为与类型参数相同的类型,A并且A在运行时无法真正检查底部的情况(尝试case a: A =>给出编译错误),因此我通过排除其他两个来捕获它。这看起来不是最佳解决方案。

0 投票
1 回答
136 浏览

scala - 使用多态函数映射通用元组

Scala 3 提供了类似于 shapeless 的态函数和元组:HList

我们如何使用 Scala 3 功能重新实现以下无形示例?

换句话说,我们怎么能编译这样的东西

0 投票
2 回答
264 浏览

scala - 不能在自写的 monad 实例上使用 flatMap 作为扩展方法

我尝试在 WriterT 上使用 flatMap 并且成功了。

所以问题可能出在我的类型上,但我找不到它有什么问题。

错误是:

值 flatMap 不是 Main.Optional[Int] 的成员。
尝试了扩展方法,但无法完全构造:
cats.syntax.flatMap.toFlatMapOps([A] =>> Any), A(given_Monad_Optional)