В Ruby почему изменчивость означает, что интерпретатор не может использовать один и тот же объект для представления двух идентичных строковых литералов? - PullRequest
4 голосов
/ 20 сентября 2019

Строки изменчивы в Ruby.Это означает, что - в отличие от Java - интерпретатор не может использовать один и тот же объект для представления строковых литералов (т. Е. "test" в цикле for создаст новый объект для каждой итерации).

Может кто-нибудь объяснить мне, почемуВ этом случае?то есть почему изменчивость препятствует использованию одного и того же объекта для представления строковых литералов?

1 Ответ

6 голосов
/ 20 сентября 2019
two_foo = 2.times.map { "foo" }
two_foo[0] << "bar"
two_foo
# => ["foobar", "foo"]

Если "foo" был выделен только один раз, а затем использован повторно, результатом будет ["foobar", "foobar"], что нарушит принцип наименьшего удивления .Если кто-то действительно хочет это сделать, следует явно использовать тот же объект:

foo = "foo"
two_foo = 2.times.map { foo }
two_foo[0] << "bar"
two_foo
# => ["foobar", "foobar"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...