2015-05-19 82 views
1

我想添加一个新的隐式类型对于已经具有隐式Fractional或Integral类型类型的每个类型T都可以分割。来自其他类型类的隐式def类型

我写的代码无法编译:

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)) 
} 

我收到的错误是:

找不到参数格隐含的价值: core.common.Divisible [双]

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

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

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

回答

3

更改其中一个隐式函数的名称,以使它们不会同时被命名:fractionalDivisible

+1

也许解释*为什么*会产生差异。 –

+0

我不知道:( –