場合によっては型クラスを使用して API を設計していますが、暗黙的な解決で問題が発生しました。以下に示すように、タイプ A の暗黙のオブジェクトが存在するが、タイプのオブジェクトがB extends A
メソッドに渡される場合、暗黙のオブジェクトを見つけることができません。これを機能させる方法はありますか、または呼び出し元は暗黙のオブジェクトを各サブクラスのスコープに入れる必要がありますか?
次に例を示します。
class A
class B extends A
class T[+X]
object T {
implicit object TA extends T[A]
}
def call[X:T](x:X) = println(x)
// compiles
call(new A)
// doesn't compile
call(new B)
var a = new A
// compiles
call(a)
a = new B
// compiles
call(a)
val b = new B
// doesn't compile
call(b)
これは、次の出力でコンパイルに失敗します。
/private/tmp/tc.scala:16: エラー: タイプ this.T[this.B] の証拠パラメーターの暗黙的な値が見つかりませんでした コール(新B) ^ /private/tmp/tc.scala:28: エラー: タイプ this.T[this.B] の証拠パラメーターの暗黙的な値が見つかりませんでした コール(b)