Scala隐式上下文解析

时间:2013-04-15 08:06:30

标签: scala implicits

我已经找到了SLS隐含解决的规则:

  1. 如果T是带有Tn的复合类型T1,那么部分的并集 T1,...,Tn,以及T本身

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

  3. 如果T是单例类型p.type,那么p

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

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

  7. 下面的示例是基于规则4的隐式解决方案吗?

    object Foo{
       trait Bar
       implicit def newBar = new Bar{
            override def toString = "Implicit Bar"
       }
    
    }
    
    implicitly[Foo.Bar]
    

    由于

    Zlaja

1 个答案:

答案 0 :(得分:1)

是的,我认为这是正确的。我认为对于单个对象Foo,类型Foo.BarFoo.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