视图边界已弃用;改为使用隐式参数

view bounds are deprecated; use an implicit parameter instead

我最近升级到 Scala 2.13,现在收到关于弃用的警告。我的函数如下所示:

implicit def convertGeneralResult[A <% ToResponseMarshallable, B <% ToResponseMarshallable](r: Either[A, B]) =
  r.fold[ToResponseMarshallable](identity, identity)

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

view bounds are deprecated; use an implicit parameter instead.
example: instead of def f[A <% Int](a: A) use def f[A](a: A)(implicit ev: A => Int)

虽然我不完全确定如何在我的案例中应用建议的修复。

这个问题有很多深度,但我只会提供一些参考,以防您想深入研究它,以及如何解决它。

早在 2013 年,在 Scala 2.11 中,您就可以在 Scala 中找到一个名为 deprecation warning for view bounds under -Xfuture. At the time this was implemented, but in case you didn't use the -Xfuture option in SCALA COMPILER OPTIONS 的错误,而您并没有意识到这一点。

如您所见,2018 年 Deprecate view bounds without -Xfuture was opened, which was merged into Scala 2.13

作为另一个参考,有一个类似的问题Scala 2.13.0 deprecates <%, but how do I get rid of this in a class definition

现在开始你的问题。您需要做的就是删除 <% 用法,并将其替换为 implicits:

implicit def convertGeneralResult[A, B](r: Either[A, B])(implicit aToMarshallable: A => ToResponseMarshallable, bToMarshallable: B => ToResponseMarshallable) =
  r.fold[ToResponseMarshallable](identity, identity)