私はちょうどScalaを学んでいます。コンパニオン オブジェクトを作成し (以下のコード スニペットを参照)、演算子 , ^
(複雑な活用を表す) を定義します。関連するクラス内のコンパニオン オブジェクト名で修飾する必要があります。私は、コンパニオンのメソッドに無条件にアクセスできるべきだという印象を受けました。私が何か間違ったことをしたかどうか誰かに教えてもらえますか?
class CQ(val r: Q, val i:Q) {
def +(z : CQ): CQ = {
return new CQ(r + z.r, i + z.i)
}
def -(z: CQ): CQ = {
return new CQ(r - z.r, i-z.i)
}
def *(z: CQ): CQ = {
return new CQ(r*z.r - i*z.i, r*z.i + i*z.r)
}
def /(z: CQ): CQ = {
val d = z.r * z.r + z.i * z.i
val n = this * CQ.^(z) // that I needed to qualify "^" is what I don't get
return new CQ(n.r / d, n.i /d)
}
override def toString = r + " + " + i + "i"
}
object CQ {
def ^(z : CQ) : CQ = {
return new CQ(z.r, Q.NEGONE*z.i)
}
val ONE = new CQ(Q.ONE,Q.ZERO)
val ZERO = new CQ(Q.ZERO, Q.ZERO)
val I = new CQ(Q.ZERO, Q.ONE)
val NEGONE = I * I
}
注: ここでは別のクラス Q が使用されていますが、ここには記載されていません。