Ruby赋值行为

时间:2013-07-25 08:04:03

标签: ruby

请帮助查找下一个行为的一些文章。

a = 'qwer'
a = b
b << 'ty'
puts b # => 'qwerty'
puts a # => 'qwerty'

但是如果

a = 'qwer'
a = b
b = 'ty'
puts b # => 'ty'
puts a # => 'qwer'

我知道为什么在这种情况下

我知道它运作良好,但我找不到解释 - 为什么这样呢

P.S。

如果适用 - 请提供有关此主题的文章的链接(或类似的可能我想念这样的更有趣的功能)。

THN。

1 个答案:

答案 0 :(得分:5)

当你这样做时

a = b

您使变量a保持对变量b的同一对象的引用。这就是你键入的原因:

b << 'ty'
变量a中包含的

字符串也将更改 - 这是相同的String实例。

另一方面,我们假设您的变量b包含对字符串'qwer'的引用。 如果你有:

a = b
b = 'ty'

在第一行中,您将变量a指定给与b相同的对象。在第二行中,您将新的String对象分配给变量b。所以最后两个变量都引用了不同的对象。