2013-04-15 69 views
1

分辨率,我發現那裏implicict解決我SLS規則:Scala的隱式上下文

  1. 如果T是一個複合型T1與......擁有TN, T1的部分的聯合.. 。,TN,以及爲T本身

  2. 如果T是一個參數化的類型S [T1,...,TN],S的部件和 T1的並集,...,Tn的

  3. 如果T是單例類型p.type,則類型的部分p

  4. 如果T是一個類型的投影小號#U,S的部件以及爲T本身

  5. 在所有其他情況下

    ,算了筆本身

是基於例如低於隱分辨率規則4?

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

} 

implicitly[Foo.Bar] 

感謝

Zlaja

+0

http://stackoverflow.com/questions/13773964/how-does-implicitly的重複在這個例子中深入研究這可能意味着還有其他重複。 –

回答

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