问题标签 [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 - Scala3中基于通配符的存在类型
如Scala 3 文档中所述,不能用通配符表示的存在类型通常会被删除。这是我的代码
斯卡拉 2
斯卡拉 3
尝试使用通配符在 Scala 3 中重写它:
文档就是这么说的
仍然支持可以仅使用通配符(但不是 forSome)表示的存在类型,但被视为精炼类型
问题:为什么我的示例不起作用。有没有办法让它工作?
scala - 如何在 Scala 3 中声明并将参数传递给隐式参数?
我在scala 2中有这个代码
这里 x
对函数的参数进行了count
注释,implicit
因此它可以double
隐式传递给函数。Scala 3
在使用给定使用/召唤时如何做到这一点?
scala - 在 Scala 3 中提取元组的子集
给定一个任意元组,我想提取元组的一个子集。签名看起来像:
whereT2
是一个元组,其中包含从 中选择的一些成员子集T1
。
使用它看起来像
我知道这需要大量使用匹配类型和类型级编程。我觉得使用 Shapeless 非常简单,但我在元组与 HLIST 的标准库中缺少一些功能。
scala - Scala 3 (Dotty) 中命名给定/使用对象的语法
是否有一种单行方式来提供对一个值的命名using
引用,该值在没有即将被弃用的implicit
关键字的情况下隐式可用(即通过语法可用)?根据文档,我希望以下工作(在 SBT 下,scalaVersion := "3.0.0-M2"
:
但这失败了
现在:我可以通过多种方式解决这个问题,但要么文档令人困惑(或错误),要么我误解了一些相当基本的东西。
解决方法 1(如此处建议):
但我希望能够用一个表达式而不是两个表达式来做到这一点。相同的注释适用于先定义给定,然后将其绑定到名称:
特别是因为我认为implicitly
将在 3.1 中弃用并在 3.2 中消失。
我们还可以将给定对象的调用包装在函数中来解决这个问题:
但这对我来说似乎是样板。
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 的函数和方法是相同还是非常相似的对象,或者至少差异已经显着减少?
scala - 通过在 Scala 3 中展开类型将案例类转换为另一个案例类
我有一个表示容器和两个案例类的枚举:
我想在 Scala 3 中编写一个通用函数,将所有案例类转换为类似PersonTemplate
的对应类Person
,例如:
我尝试了几种方法,但都没有成功,主要是因为我不明白如何使用 Scala 3 Tuple
,它在我看来与 Scala 2 Shapeless 不同HList
(即使在无形中我也不是那么好)。
我的总体方法是:
- 在元组中转换案例类。为此我发现
Tuple.fromProductTyped
- 将每个元素约束为
Container[_]
. 我发现Tuple.IsMappedBy
保证元组具有正确的形状,Tuple.InverseMap
并且似乎提取了容器内的类型。不过,我不确定将这段代码放在哪里。 - 将(poly?)函数应用于调用的每个值
Container.get
。由于我在网上发现的一点点,我最终使用了很多,.asInstanceOf
这对我来说似乎不合适。 - 使用将结果转换
Tuple
为输出类型summon[Mirror.Of[O]].fromProduct(output)
为了完整起见,这是我尝试的最后一个代码,当然不起作用:
scala - 在 Scala 3 中区分联合类型和类型参数
在 Scala 3 中,给定这样一个类型别名:
我如何区分我有两种情况中的哪一种(A
或Option[A]
)?
在尝试编写代码时,我认为主要问题在于编译器和类型,包括Either[String, B], matches
A`。我什至不知道我的问题是否有惯用的解决方案。
这是我最好的尝试,任何一个都失败了:
如您所见value
,不识别为与类型参数相同的类型,A
并且A
在运行时无法真正检查底部的情况(尝试case a: A =>
给出编译错误),因此我通过排除其他两个来捕获它。这看起来不是最佳解决方案。
scala - 不能在自写的 monad 实例上使用 flatMap 作为扩展方法
我尝试在 WriterT 上使用 flatMap 并且成功了。
所以问题可能出在我的类型上,但我找不到它有什么问题。
错误是:
值 flatMap 不是 Main.Optional[Int] 的成员。
尝试了扩展方法,但无法完全构造:
cats.syntax.flatMap.toFlatMapOps([A] =>> Any), A(given_Monad_Optional)