1

暗黙の Fractional または Integral 型クラスを既に持っているすべての型 T に対して、新しい暗黙の型クラス Divisible を追加したいと考えています。

私が書いたコードはコンパイルされません:

object Divisible {

    implicit def fractionalDivisible[T](implicit frac: Fractional[T]): Divisible[T] = new Divisible[T] {
        override def div(x: T, y: T): T = frac.div(x, y)
    }

    implicit def fractionalDivisible[T](implicit integral: Integral[T]): Divisible[T]  = new Divisible[T] {
        override def div(x: T, y: T): T = integral.quot(x, y)
    }
}

trait Divisible[T] {
    def div(x: T, y: T): T
}

object Example extends App{

    def foo[T](x: T, y: T)(implicit div: Divisible[T]) = div.div(x, y)

    println(foo(1.0, 2.0))
}

私が受け取っているエラーは次のとおりです。

パラメータ div の暗黙的な値が見つかりませんでした: core.common.Divisible[Double]

一方、暗黙的な定義をアプリに移動すると、コンパイルされます。

コンパイラが Divisible のコンパニオン オブジェクトで暗黙的な定義を見つけるのを助けるにはどうすればよいですか?

編集:この質問にはバグがありました。

4

1 に答える 1

3

暗黙の関数の 1 つの名前を変更して、両方の名前が付けられないようにします。

于 2015-05-19T15:24:39.820 に答える