【发布时间】:2017-06-05 02:06:02
【问题描述】:
在代数类型层次结构中设置类型类时遇到问题。
我有以下特点:
trait Field[F]{...}
trait VectorSpace3[V,F] extends Field[F]{...}
知道我想提供实现:
trait DoubleIsField extends Field[Double]{
...
}
trait DoubleTurple3IsVectorSpace3 extends VectorSpace3[(Double,Double,Double), Double] with Field[Double]{
...
}
trait MyOtherClassIsVectorSpace3 extends VectorSpace3[MyOtherClass, Double] with Field[Double]{
...
}
//now the implicits
implicit object DoubleIsField extends DoubleIsField
implicit object DoubleTurple3IsVectorSpace3 extends DoubleTurple3IsVectorSpace3 with DoubleIsField
implicit object MyOtherClassIsVectorSpace3 extends MyOtherClassIsVectorSpace3 with DoubleIsField
最后两个隐式导致歧义:DoubleIsField 是 3 个隐式值的一部分,代码无法编译。在 scala 中如何处理这个问题?
编辑:
错误:
ambiguous implicit values:
[error] both object DoubleIsField in object TypeClasses of type
Russoul.lib.common.TypeClasses.DoubleIsField.type
[error] and object DoubleTurple3IsVectorSpace3 in object TypeClasses of type
Russoul.lib.common.TypeClasses.DoubleTurple3IsVectorSpace3.type
[error] match expected type Russoul.lib.common.TypeClasses.Field[...Double]
EDIT2:
def func()(implicit env: Field[Double]): Unit ={
}
func()
完整的测试程序:
object Test extends App {
trait Field[F]{
}
trait VectorSpace3[V,F] extends Field[F]{
}
trait DoubleIsField extends Field[Double]{
}
trait DoubleTurple3IsVectorSpace3 extends VectorSpace3[(Double,Double,Double), Double] with Field[Double]{
}
//now the implicits
implicit object DoubleIsField extends DoubleIsField
implicit object DoubleTurple3IsVectorSpace3 extends DoubleTurple3IsVectorSpace3 with DoubleIsField
def func()(implicit env: Field[Double]): Unit ={
}
func()
}
【问题讨论】:
-
DoubleIsField(第一个声明,不是object)未声明为trait或class。什么是编译器错误信息? -
@MikeAllen 对不起,这是特质。它不是真正的代码。我只是写了简化版本来显示问题
-
@MikeAllen 查看编辑错误
-
您的代码中是否有
implicit函数参数?如果是这样,你能告诉我们它们的样子吗? -
@MikeAllen 查看新编辑
标签: scala polymorphism typeclass implicit