インクリメント、デクリメント、イコールに演算子のオーバーロードを使用しようとしている次の Groovy コード スニペットがあります。これは、2 つのインスタンスを作成し、インスタンスの 1 つをインクリメントおよびデクリメントしてから、オーバーロードされたメソッド equals を使用して 2 つのインスタンスを比較するだけです。比較をすると失敗します。このコードが完了すると、両方とも 100 になるはずです。(printステートメントはそれを示していますが、toString()
関数の1つが間違っているようです)。ここで何が間違っていますか?
これはgroovy 1.8.6です
class Overload {
def value
public Overload(value = 0) {
this.value = value
}
def next() {
value = value + 1;
}
def previous() {
value = value - 1;
}
def boolean equals(other) {
if (value == other?.value) {
return true
}
return false
}
def String toString() {
"value is = ${value}"
}
}
def cls1 = new Overload(100)
def cls2 = new Overload(100)
cls1++
cls1--
if (cls1 == cls2) {
println("cls1 == cls2")
}
else {
println("cls1 != cls2")
}
println(cls1.toString())
println(cls2.toString())
出力:
cls1 != cls2
100
value is = 100