Scala中缀运算符工作奇怪

时间:2014-03-16 18:34:49

标签: scala

我试图复制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一样。我得到了不同的结果,但不是我想要的结果。程序有什么问题?我该如何解决?

1 个答案:

答案 0 :(得分:2)

您在x中分配了y 2次和- 0次,因此减法不起作用。 将-方法的第二行从x = y - other.y更改为y = y - other.y