Почему деструктивные методы могут быть опасны?

Помните, что присваивание в большинстве случаев только копирует ссылки на объекты, и что передача параметров эквивалента присваиванию. Это значит, что в конце концов на один и тот же объект указывают несколько переменных. Если одна из этих переменных используется для вызова деструктивного метода, объект, на который ссылаются все переменные, будет изменен.

  def foo(str)
    str.sub!(/foo/, "baz")
  end

  obj = "foo"
  foo(obj)
  puts obj     #=> baz

В данном примере меняется сам аргумент.

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