有理数を加算する目的でクラスを作成しようとしています
class Rational(val numerator: Int, val denominator: Int) {
require(denominator != 0)
def this(numerator: Int) = this(numerator, 1)
def +(addend: Rational): Rational = {
new EquivalentRationals(this, addend).sum
}
def +(addend: Int): Rational =
new Rational(numerator + (denominator*addend), denominator)
override def toString = numerator + "/" + denominator
}
class EquivalentRationals(a: Rational, b: Rational) {
val first: Rational =
new Rational(a.numerator * b.denominator, a.denominator * b.denominator)
val second: Rational =
new Rational(b.numerator * a.denominator, b.denominator * a.denominator)
def sum(): Rational =
new Rational(first.numerator + second.numerator, second.denominator)
def difference(): Rational =
new Rational(first.numerator - second.numerator, second.denominator)
override def toString = first + " " + second
}
最初のクラスからオブジェクトを作成しようとすると、次のエラーが発生します
:23: エラー: タイプの不一致。found : Rational(in object $iw)(in object $iw)(in object $iw)(in object $iw) required: Rational(in object $iw)(in object $iw)(in object $iw)(in オブジェクト $iw) object $iw) new EquivalentRationals(this,addend).sum()
なぜこれが発生するのかを知りたいです。また、同等の分数を表すために別のクラスを使用する有理数を追加するための代替アプローチの提案にも感謝します。(書籍「scala でのプログラミング」の別のクラスを使用せずにこれを既に達成している合理的なクラスがあります) 編集: emacs で scala-mode を使用する場合にのみ問題が発生するようです。「インタープリターでファイルをロードする」オプションを選択して実行しようとしたため、コマンドライン経由で実行されますが、「inferior-scala」にない理由についてまだ興味があります