请帮助查找下一个行为的一些文章。
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。
答案 0 :(得分:5)
当你这样做时
a = b
您使变量a
保持对变量b
的同一对象的引用。这就是你键入的原因:
b << 'ty'
变量a
中包含的字符串也将更改 - 这是相同的String
实例。
另一方面,我们假设您的变量b
包含对字符串'qwer'
的引用。
如果你有:
a = b
b = 'ty'
在第一行中,您将变量a
指定给与b
相同的对象。在第二行中,您将新的String
对象分配给变量b
。所以最后两个变量都引用了不同的对象。