无法修改ruby中的self为整数

时间:2013-02-05 17:09:35

标签: ruby

我正在寻找一种方法在ruby中链接一个破坏性的方法来将变量的值改为1,但我收到的错误是Can't change the value of self。这在Ruby中是不可能的吗?

guesses_left = 3

class Integer
  def decrement_guess_count!
    self -= 1
  end
end

guesses_left.decrement_guess_count!

1 个答案:

答案 0 :(得分:9)

这是设计的。它并不特定于整数,所有类都表现得如此。对于某些类(例如String),您可以更改实例的状态(这称为破坏性操作),但不能完全替换该对象。对于整数,你甚至不能改变状态,他们没有任何。

如果我们愿意允许这样的话,那就会引发大量难题。比如,foo引用bar1,我们将其替换为bar2,该怎么办? foo应该指向bar1吗?为什么?为什么不应该?如果bar2具有完全不同的类型,bar1的用户应如何对此做出反应,该怎么办?等等。

class Foo
  def try_mutate_into another
    self = another
  end
end


f1 = Foo.new
f2 = Foo.new

f1.try_mutate_into f2
# ~> -:3: Can't change the value of self
# ~>         self = another
# ~>               ^

我挑战你找到一种可以进行此操作的语言。 :)