1
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("***")
}

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

4

1 回答 1

5

这与声明的顺序有关。如果您只是将 Prefixer 及其伴侣移动到主要对象上方,它也可以工作。当该类在另一个文件中时,编译器可以先扫描该文件,然后再找到实现应用程序的文件。

于 2014-08-31T06:00:45.423 回答