Почему мой объект неожиданно изменился?

  A = a = b = "abc"
  b.concat("d")
  puts a     #=>  "abcd"
  puts A     #=>  "abcd"

Переменные содержат ссылки на объекты. Присваивание A = a = b = "abc" присваивает переменным A, a и b ссылку на объект "abc".

В строке b.concat("d") был вызван метод concat, который изменил объект, и вместо "abc" он стал "abcd". Так как A и a также указывают на этот объект, возвращаемое ими значение тоже изменилось.

На практике это не такая уж и проблема, как кажется сперва.

В дополнение к этому, начиная с Ruby 1.5.2, все объекты могут быть заморожены (frozen), защищая их от изменений.

Вход для пользователей