我正在寻找一种在 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!
我正在寻找一种在 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!
这是设计使然。它不是特定于整数,所有类的行为都是这样的。对于某些类(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
# ~> ^
我挑战你找到一种可以进行这种操作的语言。:)