我尝试使用“spire”,一个scala的数学框架,但我有一个意想不到的错误。这是我的小程序:
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 = ^
我宁愿不使用maps.can你帮我吗?
答案 0 :(得分:1)
您已在apply
随播广告上定义了Rationnel_Quadratique
方法,以便返回Unit
。将apply
定义更改为:
def apply(coef: (Int, Int),n: Int = 2) = {
new Rationnel_Quadratique(n)(coef)
}
添加=
符号可确保apply
方法具有返回类型。