4

我正在寻找一种在 ruby​​ 中链接破坏性方法以将变量的值更改为一个的方法,但我收到错误消息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!
4

1 回答 1

10

这是设计使然。它不是特定于整数,所有类的行为都是这样的。对于某些类(String例如 ),您可以更改实例的状态(这称为破坏性操作),但不能完全替换对象。对于整数,您甚至无法更改状态,它们没有任何状态。

如果我们愿意允许这样的事情发生,那会引发很多棘手的问题。比如说,如果我们foo用. 应该一直指向吗?为什么?为什么不应该?如果有完全不同的类型,用户应该如何反应呢?等等。bar1bar2foobar1bar2bar1

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
# ~>               ^

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

于 2013-02-05T17:13:00.053 回答