scala - shapeless.~?>.witness[Nothing, Nothing, T](shapeless.~?>.rel[Nothing, Nothing]) 将scala版本从2升级到3
问题描述
我正在将我的 scala 项目从版本 2 升级到 3。
这是我的 build.sbt 版本 scala 版本 2
scalaVersion := "2.13.5"
version := "1.0.0"
libraryDependencies += "com.chuusai" %% "shapeless" % "2.3.7"
libraryDependencies += "org.scodec" %% "scodec-core" % "1.11.4"
libraryDependencies += "org.slf4j" % "slf4j-log4j12" % "1.7.31"
以下是示例 scala 代码 -
import scodec._
import scodec.codecs._
import scodec.bits._
import scodec.codecs.implicits._
import org.slf4j.LoggerFactory
object AkkaEventSerializer {
def toBinary(o: AnyRef): Array[Byte] = o match {
case e: Event => Codec.encode(e).require.toByteArray
case x => throw new Exception(s"unexpected object $x received which is ${x.getClass} type")
}
def fromBinary(bytes: Array[Byte], manifest: String): AnyRef = manifest match {
case EventManifest => Codec[Event].decode(BitVector.apply(bytes)).require.value
case x => throw new Exception(s"unexpected manifest $x in AdServerAkkaEventSerializer.fromBinary ")
}
final val EventManifest = classOf[Event].getName
val logger = LoggerFactory.getLogger(AkkaEventSerializer.getClass)
case class Event(etype: Int, cp: Option[Double], userId: Option[String], buyerId: Option[String] = None)
}
这适用于 scala 版本 2。
现在我将 scala 版本升级到 3。
下面是 build.sbt -
scalaVersion := "3.0.0"
version := "1.0.0"
crossScalaVersions := Seq("2.13.5", "3.0.0")
libraryDependencies += ("com.chuusai" %% "shapeless" % "2.3.7").cross(CrossVersion.for3Use2_13)
libraryDependencies += ("org.scodec" %% "scodec-core" % "1.11.4").cross(CrossVersion.for3Use2_13)
libraryDependencies += "org.slf4j" % "slf4j-log4j12" % "1.7.31"
下面是代码 scala 版本 3 -
import scodec._
import scodec.codecs._
import scodec.bits._
import scodec.codecs.implicits._
import org.slf4j.LoggerFactory
import shapeless.~?>.idKeyWitness
import shapeless.~?>.idValueWitness
import shapeless.~?>.witness
object AkkaEventSerializer {
def toBinary(o: AnyRef): Array[Byte] = o match {
case e: Event => Codec.encode(e).require.toByteArray
case x => throw new Exception(s"unexpected object $x received which is ${x.getClass} type")
}
def fromBinary(bytes: Array[Byte], manifest: String): AnyRef = manifest match {
case EventManifest => Codec[Event].decode(BitVector.apply(bytes)).require.value
case x => throw new Exception(s"unexpected manifest $x in AdServerAkkaEventSerializer.fromBinary ")
}
final val EventManifest = classOf[Event].getName
val logger = LoggerFactory.getLogger(AkkaEventSerializer.getClass)
case class Event(etype: Int, cp: Option[Double], userId: Option[String], buyerId: Option[String] = None)
}
当我编译这个程序时,我得到以下错误 -
[错误] -- 错误:/Users/rajkumar.natarajan/Documents/Coding/OS/scala3-maven-build-demo/src/main/scala/com/serialize/AkkaEventSerializer.scala:17:36 [错误] 17 | 案例 e:事件 => Codec.encode(e).require.toByteArray [错误] | ^ [错误] |找不到 scodec.Codec[com.serialize.AkkaEventSerializer.Event] 类型的惰性隐式值。[错误] |我发现:[错误] | [错误] | shapeless.~?>.witness[Nothing, Nothing, T](shapeless.~?>.rel[Nothing, Nothing]) [错误] |
[错误] |但是特征 NatTRel0 中的方法见证与 shapeless.Lazy[scodec.Codec[com.serialize.AkkaEventSerializer.Event]] 类型不匹配。[错误] -- 错误:/Users/rajkumar.natarajan/Documents/Coding/OS/scala3-maven-build-demo/src/main/scala/com/serialize/AkkaEventSerializer.scala:22:38 [错误] 22 | case EventManifest => Codec[Event].decode(BitVector.apply(bytes)).require.value [error] | ^ [错误] |找不到 scodec.Codec[com.serialize.AkkaEventSerializer.Event] 类型的惰性隐式值。[错误] |我发现:
[错误] |
[错误] | shapeless.~?>.witness[Nothing, Nothing, T](shapeless.~?>.rel[Nothing, Nothing]) [错误] |
[错误] |但是特征 NatTRel0 中的方法见证与 shapeless.Lazy[scodec.Codec[com.serialize.AkkaEventSerializer.Event]] 类型不匹配。[error] 发现两个错误 [error] 发现两个错误 [error] (Compile / compileIncremental) 编译失败
我知道我们可以使用 scala 3 版本编译 scala 2.13 代码。但我不能为这段代码。
我该如何解决这个错误?
解决方案
推荐阅读
- angular - [Angular 6]如何在实时服务器中重新加载相同的子组件页面?
- angular - Angular 中未使用预渲染
- amazon-web-services - 更改 EC2 类型后实例无法访问
- kubernetes - Kyma 控制台中“公开 API”的 CLI 等效项是什么
- mongodb - MongoDB 未作为服务运行
- javascript - 仅在定义属性时推送
- kubernetes - 变量值作为 helm 图表中的 yaml 键
- javascript - 使用NodeJS在mysql中插入关系表的最佳方法是什么
- arrays - 如何在 Reactjs 中的状态对象内将值添加到数组中
- php - 使用 swift 的 APNS 通知