问题标签 [scala-2.13]

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 回答
66 浏览

scala - 有没有办法使用对象的类型作为类型参数的参数?

我正在尝试使用 shapeless 对Hlists 进行添加和删除。但我似乎无法让它工作。

所以我在这里是我的清单:

所以removeAllon 方法Hlist只需要一个类型参数,但我似乎无法使用b.type. 我可以手动指定a.removeAll[Container["B"] :: Container["C"] :: HNil],但有什么办法只使用b's 类型?

0 投票
1 回答
332 浏览

scala - Scala 编译器抛出:java.lang.IllegalAccessError: Class 'scala.tools.nsc.transform.patmat.PatternExpansion$ExtractorAlignment'

将我的一个项目升级到 scala 2.13.4 后,出现以下错误:

(完整的堆栈跟踪在这里https://gist.github.com/froth/f4819191644ef6ced0be682ad55f8fa0因为它很长)

我没有更改代码库中的任何内容,也没有在我的项目中积极使用 LazyList。让事情更加复杂:它在我的机器上工作并且在管道中失败(相同的 java 版本,相同的 sbt 版本(sbt 1.4.4(AdoptOpenJDK Java 11.0.8)),我清除了所有缓存)。

这是一个多项目构建,顶层 build.sbt 看起来像https://gist.github.com/froth/516c4ea6f8bd98ed87e6a8cadaa117d1,在子项目中如下:https://gist.github.com/froth/03af73900724f47154a0b2477edb47ca

由于它很难重现,而且它是一个内部项目,具有更多的内部依赖关系,这就是我所能提供的。

我的问题是:有人知道是什么原因造成的,我能做什么。或者,如果有人有想法如何进一步调试或尝试获取更多关于出错的信息。

0 投票
1 回答
276 浏览

scala - 视图边界已弃用;改用隐式参数

我最近升级到 Scala 2.13,现在被警告弃用。我的功能如下所示:

弃用警告显示(我实际上有两个,每个类型参数 A/B 一个):

视图边界已弃用;改用隐式参数。
示例:而不是def f[A <% Int](a: A)使用def f[A](a: A)(implicit ev: A => Int)

不过,我不完全确定如何在我的情况下应用建议的修复程序。

0 投票
1 回答
84 浏览

scala - 在 scala 2.13 中,为什么有时无法显式调用类型类?

以下是 shapeless 2.3.3 中的一个简单示例:

最后一行,尽管 v2 在语法上与 v1 相同,但给出了以下错误:

进一步调查表明符号 v1 的类型层次结构如下所示:

但是 v2 的类型层次结构省略了大部分信息:

这是什么原因以及如何正确调用 Value[_] 的类型类?

0 投票
1 回答
88 浏览

scala - 在 scala 2.13 中,为什么有时无法显式调用类型类?- 第2部分

这是在 scala 2.13 中的后续问题,为什么有时无法显式调用类型类?

以下代码可以正常编译:

虽然以下代码在编译时和运行时语法相同,但编译失败:

结果:

此外,以下行似乎非常样板。理想情况下,我认为编译器应该能够自己找出改进,考虑到这完全是一个向上的:

为什么第二个编译失败,此外,如何摆脱样板鸭类型声明?(当然,不用修改 HasValues 类的签名)

0 投票
1 回答
140 浏览

scala - 在 scala 2.13 中,为什么有时不能推断 TypeTags?以及如何从变量符号构造一个?

这是一个无形的简单示例:

第二个和第三个it块的字节码非常相似(在?调用了 Witness. 宏之后),但是一个成功一个失败:

是什么原因造成的?我该如何规避这个问题?

0 投票
2 回答
431 浏览

java - 使用 Scala-2.13 将 Java 映射转换为 Java 代码中的 Scala 不可变映射

我想将我的 java 映射转换为 Scala 不可变映射,我有一个示例代码可以在 Scala 2.12 中正常工作,但在 Scala 2.13 中失败。

设置

untitled14\build.sbt

untitled14\project\build.properties

untitled14\src\main\java\Main.java

我执行的命令

输出

因此,您可以从上面看到代码 100% 正确运行。

现在如果我更新我build.sbt的使用scala-2.13.3会有一个编译错误。

untitled14\build.sbt

我执行的命令

输出

编译

我尝试使用

但得到的错误输出为

有人可以让我知道如何正确地做到这一点吗?

注意:-我正在使用jvm-14, sbt-1.4.1, scala-2.13.3

0 投票
3 回答
139 浏览

scala - 将使用访问者的 Traversable 迁移到 Scala 2.13 中的 Iterable

Scala 2.13的迁移指南解释说,它Traversable已被删除,Iterable应该改用它。对于一个使用访问者在树的类中实现foreach方法的项目来说,这种变化特别烦人:Node

输出:

迁移到 Scala 2.13 的一个简单修复方法是首先将访问过的元素存储在remaining缓冲区中,然后使用该缓冲区返回一个迭代器:

这种解决方案的缺点是它引入了对 GC 施加压力的新分配,因为访问的元素的数量通常非常大。

您对如何从 迁移TraversableIterable使用现有访问者但不引入新分配有什么建议吗?

0 投票
2 回答
108 浏览

scala - 在 scala 中,如何使类型类适用于 Aux 模式?

这是一个简单的例子:

对象 Base/ForH 显然有一个稳定的路径,这消除了编译器无法解析 type 的可能性ForH.Out

困扰我的不是编译器多么无能为力ForH <:< Aux[HNil],而是通过简单的类型向上转换(最后两行)来修补它是多么容易。恕我直言,这两个特性(类型 lambda 和类型类)都是函数式编程的重要方面,为什么它们不能同时协同工作?

如果您熟悉编译器设计,我会有一个额外的问题:如何改进类型类搜索算法以实现它?非常感谢您的意见。

更新 1:已经提出了一个特定的修复,但我在尝试概括它时遇到了另一个问题,请参阅In scala, how to make type class working for Aux 模式?-详细信息第 2 部分

0 投票
1 回答
154 浏览

scala - 在 scala 中,如何使类型类适用于 Aux 模式?- 第2部分

这是一个后续问题:在 scala 中,如何使类型类适用于 Aux 模式?

考虑以下示例:

的所有实现都TypeClasses包含其底层的隐式范围TypeClass,其中,T1是最简单和具体的定义ForH,不幸的是它不起作用。@Dan Simon (in ) 提出了一项改进T2,它使用类型参数来允许 spark 编译器发现ForH <:< Base.Aux[HNil]

现在想象一下,我想扩展@Dan Simon 的解决方案,以便类型类适用于所有类,例如ForH不同种类的 HList(HNil 的超级特征)。2 个自然扩展分别在T3&T4中。

不幸的是,它们都不起作用。可以用无效的事实来解释,但不能T4以此为借口。另外,没有办法改进它以编译成功。ForH <:< Aux[HList]T3

为什么类型类召唤算法失败了?应该怎么做才能使类型类模式真正起作用?