编译器找不到伴随对象中定义的隐式

时间:2019-05-25 04:28:09

标签: scala

我有一个定义特征及其配套对象的文件。

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 
  }
}

编译器为什么找不到伴随对象中定义的隐式?

据我了解,在同伴对象中定义的隐式会自动带入范围。

1 个答案:

答案 0 :(得分:2)

  

据我了解,在同伴对象中定义的隐式会自动带入范围。

否,编译器会查找转换中涉及的类型的伴随对象 及其组成部分。例如。在Where does Scala look for implicits? Companion Objects of a Type中:

  
    

首先,研究“源”类型的对象伴侣...其次,期望类型的伴侣对象...请注意,还对超类的伴侣对象进行了研究...

  

即为了使该规则适用于intToString,需要在IntString或它们的超类型之一的伴随对象中声明它(当然不能这样做)