来自其他类型类的隐式def类类

时间:2015-05-19 15:02:13

标签: scala typeclass implicit companion-object implicit-typing

我想为每个类型T添加一个新的隐式类型Divisible,它已经有一个隐式的Fractional或Integral类型。

我编写的代码无法编译:

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

另一方面,如果我将隐式def移动到App中,它会编译。

如何帮助编译器在Divisible的伴随对象中找到隐式def?

编辑: 这个问题有一个错误。

1 个答案:

答案 0 :(得分:3)

更改一个隐式函数的名称,使它们不同时命名为:fractionalDivisible