用于元组的应用不起作用

时间:2013-10-01 19:28:57

标签: scala tuples

我尝试使用“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你帮我吗?

1 个答案:

答案 0 :(得分:1)

您已在apply随播广告上定义了Rationnel_Quadratique方法,以便返回Unit。将apply定义更改为:

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

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