在Ruby中,为什么可变性意味着解释器不能使用同一对象来表示两个相同的字符串文字?

JB2*_*JB2 4 ruby string

字符串在Ruby中是可变的。这意味着-与Java不同,解释器不能使用相同的对象来表示字符串文字(即"test",在for循环中,每次迭代都会创建一个新对象)。

有人可以向我解释为什么会这样吗?即,为什么可变性会阻止使用同一对象来表示字符串文字?

Ama*_*dan 6

two_foo = 2.times.map { "foo" }
two_foo[0] << "bar"
two_foo
# => ["foobar", "foo"]
Run Code Online (Sandbox Code Playgroud)

如果"foo"只分配了一次,然后重新使用,则结果将是["foobar", "foobar"]相反的,这将违反最小惊讶原则。如果有人真的想这样做,则应明确使用同一对象:

foo = "foo"
two_foo = 2.times.map { foo }
two_foo[0] << "bar"
two_foo
# => ["foobar", "foobar"]
Run Code Online (Sandbox Code Playgroud)