1

我在 SLS 中找到了隐含解析的规则:

  1. 如果 T 是复合类型 T1 与 ... 与 Tn,T1、...、Tn 的各部分的并集,以及 T 本身

  2. 如果 T 是参数化类型 S[T1, ..., Tn],则 S 和 T1, ..., Tn 各部分的并集

  3. 如果 T 是单例类型 p.type,则 p 的类型的部分

  4. 如果 T 是类型投影 S#U,则 S 的部分以及 T 本身

  5. 在所有其他情况下,只有 T 本身

下面的示例是基于规则 4 的隐式解析吗?

object Foo{
   trait Bar
   implicit def newBar = new Bar{
        override def toString = "Implicit Bar"
   }

}

implicitly[Foo.Bar]

谢谢

兹拉亚

4

1 回答 1

1

是的,我相信这是正确的。我认为对于单例对象Foo,类型Foo.Bar与以下内容相同Foo.type#Bar

implicitly[Foo.type#Bar] // ok

还:

def a(f: Foo.type#Bar) {}
def b(f: Foo.Bar) { a(f) }       // accepted

def c(f: Foo.Bar) {}
def d(f: Foo.type#Bar) { c(f) }  // accepted
于 2013-04-15T10:27:57.927 回答