【发布时间】:2021-05-19 13:22:39
【问题描述】:
使用 Scala 版本 2.11.12。
我似乎无法使 Foundation 特征提供的隐式 config 对 Path 类的构造函数可见。
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,代码也可以工作。
有没有办法使隐式config 对Path 的构造函数可见,而无需定义新的隐式变量或删除NavigatorBase 的扩展名?
【问题讨论】:
-
它为我编译:scastie.scala-lang.org/BalmungSan/yRtIa6cMS2GktJzTi1q0Bg - 你确定错误是真的吗?也许只是 IntellIJ。你检查过你的构建工具吗? - 如果它是真实的,那么您确定您拥有在该示例中重现它所需的一切吗?也许指定 Scala 版本。
-
修改问题以包含Scala版本,感谢提醒!我在使用sbt的时候遇到了这个错误,在spark-shell中复现了。
-
我在 Scastie 中尝试了 2.11.12 scala 版本并且能够重现错误。好像是版本问题。非常感谢分享这个!