代数型の階層で型クラスを設定する際に問題があります。スカラ型のクラス暗黙のあいまいさ
私は、以下の特徴を持っている:
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つの暗黙の値の一部であり、コードはありませんコンパイルしないでください。スカラーでこの問題に対処するには?
EDIT:
エラー:
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申し訳ありませんが、それは形質です。それは実際のコードではありません。私はちょうど問題を示す簡略版を書いた – Russoul
@MikeAllenエラーの編集を参照してください – Russoul