【问题标题】:could not find implicit value when i compile the sbt编译 sbt 时找不到隐式值
【发布时间】:2021-02-03 18:10:50
【问题描述】:

我有一个配置了 Dependencias.scalabuild.sbtplugins.sbt 的 sbt 项目,我有这个依赖:https://christopherdavenport.github.io/cormorant/

 lazy val `cormorant-core`         = "io.chrisdavenport"       %% "cormorant-core"           % Version.cormorant
  lazy val `cormorant-generic`      = "io.chrisdavenport"       %% "cormorant-generic"        % Version.cormorant
  lazy val `cormorant-parser`       = "io.chrisdavenport"       %% "cormorant-parser"         % Version.cormorant
  lazy val `cormorant-http4s`       = "io.chrisdavenport"       %% "cormorant-http4s"         % Version.cormorant
  lazy val `cormorant-refined`      = "io.chrisdavenport"       %% "cormorant-refined"        % Version.cormorant

当我编译它时:sbt compile,出现这个错误:

[error] /home/javier/IdeaProjects/ERPFetcherJavs/src/main/scala/com/arkondata/bipo/utils/CSVHandler.scala:11:53: could not find implicit value for parameter gen: shapeless.LabelledGeneric.Aux[A,H]
[error]   private implicit val lr: LabelledRead[ItemData] = deriveLabelledRead
[error]                                                     ^
[error] /home/javier/IdeaProjects/ERPFetcherJavs/src/main/scala/com/arkondata/bipo/utils/CSVHandler.scala:13:54: could not find implicit value for parameter gen: shapeless.LabelledGeneric.Aux[A,H]
[error]   private implicit val lw: LabelledWrite[ItemData] = deriveLabelledWrite
[error]                                                      ^
[error] two errors found
[error] (Compile / compileIncremental) Compilation failed

我该如何解决它??

【问题讨论】:

  • 这似乎不是依赖问题。编译器抱怨是因为您调用的方法需要一个隐式参数(如果您不知道它们是什么,请自己阅读这些参数)。如果您希望有人帮助您,我认为您需要提供一个最小的、可重现的示例:stackoverflow.com/help/minimal-reproducible-example
  • 请显示ItemData。

标签: scala sbt implicit


【解决方案1】:

假设ItemData是一个简单的case类,例如:

case class ItemData(a: String)

然后,当运行上面的代码时,上面的错误会重现。为什么会这样?

deriveLabelledReadpackage io.chrisdavenport.cormorant.generic 的一个方法,它需要两个隐式:

def deriveLabelledRead[A, H <: HList](
  implicit gen: LabelledGeneric.Aux[A, H],
  hlw: Lazy[LabelledRead[H]])

读完docs,我们需要做一堆导入:

import io.chrisdavenport.cormorant._
import io.chrisdavenport.cormorant.generic.semiauto._
import io.chrisdavenport.cormorant.parser._
import io.chrisdavenport.cormorant.implicits._
import cats.implicits._
import java.util.UUID
import java.time.Instant

导入这些时,deriveLabelledRead 具有需要正确创建的隐式。

【讨论】:

    猜你喜欢
    • 2019-12-04
    • 1970-01-01
    • 2017-10-09
    • 2011-12-24
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多