Scalaで遊んでいたときに、何かを理解できませんでした。たぶん私は完全に間違っています。Scalaのクラスからシングルトンオブジェクトを作成する
私は、Rational例と複雑な例をしようとしていたが、私はここに、R * 3月5日と1/2 * R
のような操作を使用する方法を見つけることができませんでしたが、私が働いている複素数の一例です
class Complex(val real : Int, val img : Int){
def this(real: Int) = this(real, 0)
def *(that : Complex) = {
val realPart = this.real * that.real + -(this.img * that.img)
val imgPart = this.real * that.img + this.img * that.real
new Complex(realPart, imgPart)
}
override def toString = this.real + "+" + this.img + "i"
}
object Complex {
def apply(real : Int, img : Int) = new Complex(real, img)
def apply(real : Int) = new Complex(real)
}
object ComplexNumbers {
def main(args: Array[String]) {
import ComplexConversions._
println(Complex(1,2)) // 1+2i
println(I*2) //0+2i
println(2*I) //0+2i
}
}
まあ、私は私
object I{
def apply() = new Complex(0,1)
def *(that : Complex) = {
val realPart = 0 * that.real + -(1 * that.img)
val imgPart = 0 * that.img + 1 * that.real
new Complex(realPart, imgPart)
}
}
オブジェクトを作成しようとしましたが、それはI * 2のために仕事をしました。私は2 * Iの問題があります。私が望む結果にどのように到達することができますか?
メソッドパートのルックアップについて理解しています。コードを追加しましたが、コンプレックスのように動作しないため、型の不一致エラーが発生します。 (それはI.typeと言う)? –
問題は、 "オブジェクト"として "I"を宣言することによって、自身のシングルトンクラスを取得することです。これは、コンプレックスとは異なるクラスです。 「複合語を拡張する」を「I」に追加していないので、複素数でもありません。私は私の答えに完全な実例を加えました。 – Rich