我试图复制Scala in Depth一书中的一个例子。这个例子是为了证明可变性是多么糟糕,人们应该更喜欢不变性。
但是,我的小实验失败了,程序表现出奇怪的行为。这是我的计划:
class Vector2D(var x: Double, var y: Double) {
def -(other:Vector2D) = {
x = x - other.x
x = y - other.y
this
}
def magnify(amt: Double) : Vector2D = {
x *= amt
y *= amt
this
}
override def toString = s"Vector2D($x, $y)"
}
从书中复制第二个功能。我必须添加两个函数才能使结果看起来像本书所展示的那样。
程序停止了第一个功能:-
我使用了Scala REPL:
scala> val x = new Vector2D(1,1)
x: Vector2D = Vector2D(1.0, 1.0)
scala> val y = new Vector2D(-1, 1)
y: Vector2D = Vector2D(-1.0, 1.0)
scala> x - y
res0: Vector2D = Vector2D(0.0, 1.0)
这看起来不太正确......我也试过this.x = this.x - other.x
,和y一样。我得到了不同的结果,但不是我想要的结果。程序有什么问题?我该如何解决?
答案 0 :(得分:2)
您在x
中分配了y
2次和-
0次,因此减法不起作用。
将-
方法的第二行从x = y - other.y
更改为y = y - other.y
。