【问题标题】:type mismatch errors when upgrading from scala 2.9 to 2.13.2从 scala 2.9 升级到 2.13.2 时出现类型不匹配错误
【发布时间】:2020-05-31 18:44:30
【问题描述】:

我最近恢复了一个用 scala 2.9 编写的旧库,并使用 scala 2.13.2 创建了一个新的 scala 项目

我收到如下错误:

type mismatch;
found   : scala.collection.mutable.Buffer[Any]
[error]  required: Seq[Any]

在 2.9 到 2.13.2 之间是否有特定的变化,不涉及隐式转换序列或可能解决许多此类编译错误的东西?

我必须将.toSeq 添加到我的许多函数返回语句中,这些语句是 Buffer[Any] 的 val,需要作为参数传递给需要序列的函数。

【问题讨论】:

标签: scala


【解决方案1】:

在过去 7 年多的时间里发生了很多事情(包括对集合库的重写)。

如果添加 .toSeq 可以解决您的问题 - 那就去做吧。

如果您想知道具体发生了什么变化 - 尝试逐个版本升级:首先升级到 scala-2.10.,然后升级到 2.11.,然后是 2.12.*,最后升级到2.13.2.

在每次升级时,您可能会看到弃用警告。在升级到下一个版本之前修复它们。

【讨论】:

    【解决方案2】:

    勇敢,但也许是坏的形式,去打扰死者。尽管如此,也许将mutable.Buffer 传递为mutable.Seq 而不是Seq,默认情况下是immutable.Seq。考虑

    val mb = mutable.Buffer(11, Some(42))
    val ms: mutable.Seq[Any] = mb // OK
    val is: Seq[Any] = mb         // NOK
    

    【讨论】:

      猜你喜欢
      • 2020-04-11
      • 2012-02-16
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多