Ruby + =重载

nes*_*ola 3 ruby

这有什么问题?

class Vec2
  attr_accessor :x, :y
  # ...
  def += (v)
    @x += v.x
    @y += v.y
    return self
  end
  # ...
end
Run Code Online (Sandbox Code Playgroud)

我在网上找不到太多东西.有人说这是因为在红宝石中+ =完成了调用+然后=,他开玩笑吧?

在有趣的情况下,他是对的,是否有一些解决方法(除了定义一个名为"添加"的方法)?

sep*_*p2k 6

有人说这是因为在红宝石中+ =完成了调用+然后=,他开玩笑吧?

不,他是对的(除了"calling ="有点不准确,因为=它不是一种方法).

是否有一些解决方法(除了定义一个名为"添加"的方法)?

你的意思是除了定义+和生活+=将改变变量而不是对象的事实?

您可以更改+为变异对象然后返回self,在这种情况下v1 += v2v1 + v2与对象相同并且会使对象变异.然而,我强烈建议反对,因为没有人会期望+变异(类似大多数红宝石识字的人会期望+=重新分配变量而不是改变对象,所以试图改变它可能完全不可取).

除此之外,不,没有办法解决这个问题.