小编Jwo*_*e55的帖子

为什么某些 Ruby 方法(例如 String#replace)会改变变量的副本?

首先,我刚刚学习 Ruby,并且有 JavaScript 背景。我有一个问题找不到答案。我有这个例子:

a = 'red'
b = a
b.replace('blue')
b = 'green'
print a
Run Code Online (Sandbox Code Playgroud)

蓝色的

我的问题是:为什么会这样?我知道该设置b = a使它们具有相同的 object_id,因此从技术上讲,同一个变量字符串有两个名称。但我从来没有看到使用这种递归值更改的理由。如果我设置b = a它是因为我想操纵a的值而不改变它。

此外,似乎有时一个方法会修改a,但有时它会导致“b”成为一个新对象。这看起来模棱两可,没有任何意义。

我什么时候会用到这个?重点是什么?这是否意味着我无法将a的值传递到另一个变量而不将任何更改传播回a

ruby string variable-assignment object-identity

3
推荐指数
1
解决办法
2001
查看次数