Ruby gsub не меняет содержимое при настройке содержимого

Может кто-нибудь объяснить разницу между следующими двумя строками кода :

1. element.content.gsub!("#{i}", "#{a[i]}")
2. element.content = element.content.gsub("#{i}", "#{a[i]}")

В следующем коде:

a.each_index do |i|
  @doc.traverse do |element|
    if element.text?
      element.content = element.content.gsub("#{i}", "#{a[i]}")
    end
  end
end
puts @doc

Представленный выше код изменяет @doc. А если я использую строку 1 сgsub!это не влияет на @doc. Связано ли это с тем, как блоки обрабатывают свои параметры? Разве в Ruby не следует передавать все по ссылке, если только явно не копируется с помощью метода?

5
задан ismail 30 March 2012 в 01:15
поделиться