2016-12-29 10 views
0

を暗黙の価値を置くためのケースを考えてみましょう:シングルトンタイプについての暗黙的な変換を可能にするために

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 

シングルトン型パラメータの暗黙的な変換を有効にする方法?動作しますが、醜い

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]] 

はトレードオフを考慮してください。良い方法はありますか?

+0

明示的に 'b._'をインポートしたくないと思いますか? –

答えて

0

import b._を追加することができます。

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]] 
関連する問題