package-private配对对象中的隐含值/转换

时间:2015-06-15 23:46:02

标签: scala

我试图在此找到任何信息(文档,规格等),但该主题似乎非常难以理解。我要求提供有关以下工作原理的任何参考资料。

trait Foo[A]

package bar {
  trait Bar
  private[bar] object Bar {
    implicit val b: Foo[Bar] = null
  }
}

import bar._
def foo[A: Foo](a: A): Foo[A] = implicitly[Foo[A]]

foo(new Bar) // compiles

不知何故,编译器能够在package-private伙伴对象Foo[Bar]中找到类型Bar的隐式值。为什么呢?

澄清我的问题。一切都改变了,我们改变了伴随对象,如下所示(隐式值是私有的,但封闭对象不是)。上面的代码不会使用此Bar进行编译。

package bar {
  trait Bar
  object Bar {
    private implicit val b: Foo[Bar] = null
  }
}

是否有一些文档/规范可以解释为什么会发生这种情况?

0 个答案:

没有答案