字符串在Ruby中是可变的。这意味着-与Java不同,解释器不能使用相同的对象来表示字符串文字(即"test",在for循环中,每次迭代都会创建一个新对象)。
有人可以向我解释为什么会这样吗?即,为什么可变性会阻止使用同一对象来表示字符串文字?
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)