Scala隐含的伴随对象逻辑

时间:2014-08-31 05:40:18

标签: 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("***")
}

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

1 个答案:

答案 0 :(得分:5)

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