私はScalaにとってかなり新しいです。いくつかの演算(+、 - 、*)の下で閉ざされたいくつかの数学的オブジェクト(Complex、Polynomialなど)をジェネリックで使用できるように記述したいし、暗黙のキャストを使うこともできます。数字を実装する
私は最初のビットを解決したようです。複雑な
test(Real(5), Complex(2, 1))
リターン(7、1)となるよう
今trait GroupUnderAddition[T] {
def + (t : T) : T
}
case class Real(d : Double) extends GroupUnderAddition[Real] {
def + (r : Real) = Real(d + r.d)
}
case class Complex(re : Double, im : Double) extends GroupUnderAddition[Complex] {
def + (c : Complex) = Complex(re + c.re, im + c.im)
}
object Test {
implicit def real_to_complex(r : Real) = Complex(r.d, 0)
def test[G <: GroupUnderAddition[G]](a : G, b : G) = a + b
def main(args : Array[String]) {
println(test(Real(5), Real(2)))
}
}
、どのように私は)(テストを書くことができますか?
確かに私はこれを行うことができましたが、ジェネリック薬を服用したいと思います。自分のやり方で、2つの多項式でテストを呼びたい場合は、すべてを書き直す必要があります。 –
はい、2つの問題があります。まず、 '+'メソッドを実装する汎用の 'GroupUnderAddition'を作成したいということです。一方、 'Real'と' Complex'の2種類の数字を実装した特定の 'GroupUnderAddition'を使いたいとします。だからあなたは別のトリックをしなければなりません、これがあなたが '暗黙のdef'について考えた理由ですが、あなたのケースで私はこれで解決策を見つけられませんでした。 –