2

発散する暗黙的な展開を生成せずに、最も具体的なものが選択される型クラスに複数の適切な代替手段を持つ方法はありますか? このようになります

trait A

trait B extends A

case class C extends B

trait Tester[-T] {def test (t : T) : Boolean}

object Tester{

  def test[T] (t : T)(implicit tester : Tester[T]) = tester.test(t)

  implicit def ATester = new Tester[A] {
    override def test (a : A) = true
  }

  implicit def BTester = new Tester[B] {
    override def test (b : B) = false
  }

}

val c = C()
Tester.test(c)

継承階層で C は A よりも B に近いため、これを false にする必要があります。

4

2 に答える 2

0

これで助かったようです

trait Tester[T] {def test (t : T) : Boolean}

object Tester{

  def test[T] (t : T)(implicit tester : Tester[T]) = tester.test(t)

  implicit def ATester[T <: A] = new Tester[T] {
    override def test (a : T) = true
  }

  implicit def BTester[T <: B] = new Tester[T] {
    override def test (b : T) = false
  }

}

異議はありますか?

于 2013-04-16T21:38:52.523 に答える