我正在寻找一种方法在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!
答案 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
# ~> ^
我挑战你找到一种可以进行此操作的语言。 :)