【问题标题】:Scala Could not find implicit value supplied by mixinScala 找不到 mixin 提供的隐式值
【发布时间】:2021-05-19 13:22:39
【问题描述】:

使用 Scala 版本 2.11.12。

我似乎无法使 Foundation 特征提供的隐式 configPath 类的构造函数可见。

case class Config() {
  val content = "hello"
}

trait Foundation {
  implicit val config: Config = Config()
}

trait PathBase {
  def somePath: String = "/user/xxx"
}

class Path(implicit val config: Config) extends PathBase {
  def someOtherPath: String = "/user/yyy"
}

trait NavigatorBase {
  protected implicit val hdfs: PathBase
}

trait Navigator extends NavigatorBase with Foundation {
//  private implicit val config1: Config = config
  protected implicit val hdfs = new Path
}

以上代码引发如下错误:

:39: 错误:找不到参数配置的隐式值:配置 受保护的隐式 val hdfs = 新路径

但是,如果我在调用Path 的构造函数之前使用Foundation 提供的config 定义一个新的隐式val(请参阅代码中的注释行),则该代码有效。如果我写trait Navigator extends Foundation 而不混入NavigatorBase,代码也可以工作。

有没有办法使隐式configPath 的构造函数可见,而无需定义新的隐式变量或删除NavigatorBase 的扩展名?

【问题讨论】:

  • 它为我编译:scastie.scala-lang.org/BalmungSan/yRtIa6cMS2GktJzTi1q0Bg - 你确定错误是真的吗?也许只是 IntellIJ。你检查过你的构建工具吗? - 如果它是真实的,那么您确定您拥有在该示例中重现它所需的一切吗?也许指定 Scala 版本。
  • 修改问题以包含Scala版本,感谢提醒!我在使用sbt的时候遇到了这个错误,在spark-shell中复现了。
  • 我在 Scastie 中尝试了 2.11.12 scala 版本并且能够重现错误。好像是版本问题。非常感谢分享这个!

标签: scala implicit


【解决方案1】:

解决方案:正如@Luis Miguel Mejía Suárez 在评论中指出的那样,使用最新版本的 Scala。

Scala 2.11.12 引发错误:https://scastie.scala-lang.org/yZU850eUQvKSt6LJ0GIeVA

Scala 2.13.4 工作正常:https://scastie.scala-lang.org/8FYzJdimSOanOLow25rN3g

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多