我已经找到了SLS隐含解决的规则:
如果T是带有Tn的复合类型T1,那么部分的并集 T1,...,Tn,以及T本身
如果T是参数化类型S [T1,...,Tn],则S和部分的并集 T1,...,Tn
如果T是单例类型p.type,那么p
如果T是类型投影S#U,S的部分以及T本身
在所有其他情况下,只是T本身
下面的示例是基于规则4的隐式解决方案吗?
object Foo{
trait Bar
implicit def newBar = new Bar{
override def toString = "Implicit Bar"
}
}
implicitly[Foo.Bar]
由于
Zlaja
答案 0 :(得分: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