我有一个定义特征及其配套对象的文件。
trait SomeTrait {
}
object SomeTrait extends SomeConfig {
implicit def intToString(v: Int): String = v.toString
}
在另一个文件中,我有一个case类,该类与上面的特征一起扩展了特征。
case class SomeCaseClass extends AnotherTrait with SomeTrait {
protected def someLoginc(): Unit = {
// The compiler cannot find the implicit def intToString
}
}
编译器为什么找不到伴随对象中定义的隐式?
据我了解,在同伴对象中定义的隐式会自动带入范围。
答案 0 :(得分:2)
据我了解,在同伴对象中定义的隐式会自动带入范围。
否,编译器会查找转换中涉及的类型的伴随对象 及其组成部分。例如。在Where does Scala look for implicits? Companion Objects of a Type中:
首先,研究“源”类型的对象伴侣...其次,期望类型的伴侣对象...请注意,还对超类的伴侣对象进行了研究...
即为了使该规则适用于intToString
,需要在Int
,String
或它们的超类型之一的伴随对象中声明它(当然不能这样做)