1

我尝试使用 scala 的数学框架“spire”,但出现意外错误。这是我的小程序:

import spire.algebra._
import spire.implicits._

trait AbGroup[A] extends Group[A]

final class Rationnel_Quadratique(val n1: Int = 2)(val coef: (Int, Int)) {
override def toString = {
    coef match {
        case (c, i) =>
            s"$c + $i√$n"
    }
}

def a() = coef._1

def b() = coef._2

def n() = n1


}

object Rationnel_Quadratique {

def apply(coef: (Int, Int),n: Int = 2) {
    new Rationnel_Quadratique(n)(coef)
}


}

object AbGroup {

implicit object RQAbGroup extends AbGroup[Rationnel_Quadratique] {
    def +(a: Rationnel_Quadratique, b: Rationnel_Quadratique): Rationnel_Quadratique = Rationnel_Quadratique(coef=(a.a() + b.a(), a.b() + b.b()))   <---

    def inverse(a: Rationnel_Quadratique): Rationnel_Quadratique = Rationnel_Quadratique((-a.a(), -a.b()))

    def id: Int = Rationnel_Quadratique((0, 0))
}

}


object euler66_2 extends App {

println("salut")

val a = r"10/7"
val b = r"5/12"
println(a / b)

val c = Rationnel_Quadratique(1, 2)
val d = Rationnel_Quadratique(3, 4)
val e = c + d
println(e)


}

该错误不依赖于数学,而是依赖于 apply 方法:在与箭头一致的行中,编译器不允许使用元组:

类型不匹配; 找到: 所需单位:Rationnel_Quadratique def +(a:Rationnel_Quadratique,b:Rationnel_Quadratique):Rationnel_Quadratique = Rationnel_Quadratique(coef= ^

我宁愿不使用地图。你能帮帮我吗?

4

1 回答 1

1

您已经applyRationnel_Quadratique同伴上定义了 return的方法Unitapply将定义更改为:

def apply(coef: (Int, Int),n: Int = 2) = {
  new Rationnel_Quadratique(n)(coef)
}

添加=符号将确保该apply方法具有返回类型。

于 2013-10-01T19:34:34.253 回答