来自其他类型 类 的隐式 def 类型 类
Implicit def type classes from other type classes
我想添加一个新的隐式类型 class 对于已经具有隐式分数或整数类型的每个类型 T 可整除 classes.
我写的代码编译不通过:
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))
}
我收到的错误是:
could not find implicit value for parameter div:
core.common.Divisible[Double]
另一方面,如果我将隐式 def 移动到应用程序中,它会编译。
如何帮助编译器在 Divisible 的伴随对象中找到隐式 def?
编辑:
这个问题有一个错误。
更改其中一个隐式函数的名称,这样它们就不会同时命名:fractionalDivisible
我想添加一个新的隐式类型 class 对于已经具有隐式分数或整数类型的每个类型 T 可整除 classes.
我写的代码编译不通过:
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))
}
我收到的错误是:
could not find implicit value for parameter div: core.common.Divisible[Double]
另一方面,如果我将隐式 def 移动到应用程序中,它会编译。
如何帮助编译器在 Divisible 的伴随对象中找到隐式 def?
编辑: 这个问题有一个错误。
更改其中一个隐式函数的名称,这样它们就不会同时命名:fractionalDivisible