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和伴随对象放在另一个文件中,它就可以工作。那是为什么?
答案 0 :(得分:5)
这与声明的顺序有关。 如果您只是将Prefixer及其伴随移动到主对象上方,它也可以工作。 当类在另一个文件中时,编译器可以先扫描该文件。然后来到实现App的文件。