Scala隐含的伴随对象逻辑

Sau*_*hah 1 scala implicit companion-object

object Test extends App {

  def print(s: String)(implicit p: Prefixer) = {
    println(p.prefix + s)
  }

  print("test")

}

case class Prefixer(prefix: String)

object Prefixer {
  implicit val p = Prefixer("***")
}
Run Code Online (Sandbox Code Playgroud)

上面的代码无法编译,因为编译器无法为Prefixer找到隐式值.但是,如果我将case类Prefixer和伴随对象放在另一个文件中,它就可以工作.这是为什么?

Rav*_*ran 5

这与宣言的顺序有关.如果您只是将Prefixer及其伴随移动到主对象上方,它也可以工作.当类在另一个文件中时,编译器可以先扫描该文件,然后转到实现App的文件.