2016-12-29 4 views
0

Betrachten wir den Fall zu aktivieren:Wo impliziten Wert setzen implizite Konvertierung über Singleton Art

class T[A0, B0](val a: A0, val b: B0) 
class A 
class B(val a: A) { 
    b => 
    implicit def t: T[a.type, b.type] = new T(a, b) 
} 
val b = new B(new A) 
val t1 = implicitly[T[b.a.type, b.type]]// can't compile, I want t1 = b.t 

Wie implizite Konvertierung von Singleton Typ-Parameter aktivieren?

Betrachten Sie den Trade-off:

class T[A0, B0, H0](val a: A0, val b: B0) 
class A 
class B(val a: A) { 
    b => 
    class H 
    object H{ 
    implicit def t: T[a.type, b.type, b.H] = new T(a, b)   
    } 
} 
val a = new A 
val b = new B(a) 
val t1 = implicitly[T[b.a.type, b.type, b.H]] 

das funktioniert, sieht aber hässlich. Gibt es eine gute Methode?

+0

Ich denke, Sie möchten nicht explizit importieren. –

Antwort

0

Wir können einfach import b._ hinzufügen.

class T[A0, B0](val a: A0, val b: B0) 
class A 
class B(val a: A) { 
    b => 
    implicit def t: T[a.type, b.type] = new T(a, b) 
} 
val b = new B(new A) 
import b._ 
val t1 = implicitly[T[b.a.type, b.type]]