Ruby 1.9 Array.to_s ведет себя по-другому?

Я написал небольшое небольшое приложение, которое берет базовый файл кода с некоторыми ключевыми словами, файл замен для ключевых слов и выводит новый файл с замененными ключевыми словами.

Когда я использовал Ruby 1.8, мои результаты выглядели бы нормально. Теперь, когда вы используете Ruby 1.9, мой замененный код имеет вместо него строки символов строки строки.

Например, я вижу что-то вроде:

["\r\nDim RunningNormal_1 As Boolean", "\r\nDim RunningNormal_2 As Boolean", "\r\nDim RunningNormal_3 As Boolean"]

вместо:

Dim RunningNormal_1 As Boolean
Dim RunningNormal_2 As Boolean
Dim RunningNormal_3 As Boolean

Я использую хеш замещений { "KEYWORD" = > [ "1", "2", "3" ]} и массив замененных строк.

Я использую этот блок для завершения замены:

resultingLibs.each do |x|
  libraryString.sub!(/(<REPEAT>(.*?)<\/REPEAT>)/im) do |match|
    x.each do |individual|
      individual.to_s 
    end
  end
end
#for each resulting group of the repeatable pattern,
#  
#Write out the resulting libs to a combined string

Моя догадка заключается в том, что я печатаю массив вместо строк в массиве. Любые предложения по исправлению. Когда я отлаживаю и печатаю свою замененную строку с помощью puts, результат выглядит корректно. Когда я использую метод to_s (каким образом мое приложение записывает вывод в выходной файл), мой вывод выглядит неправильно.

Исправить было бы неплохо, но я действительно хочу знать, что изменилось между Ruby 1.8 и 1.9, что вызывает такое поведение. Метод to_s каким-то образом изменился в Ruby 1.9?

* Я неопытен в Ruby

Ответы

Ответ 1

Да, вы вызываете to_s в массив строк. В 1.8, эквивалентном вызову join, в 1.9 он эквивалентен вызову inspect.

Чтобы получить нужное поведение в 1.8 и 1.9, вызовите join вместо to_s.

Ответ 2

См. здесь, под Array

Array#to_s is equivalent to Array#inspect

[1,2,3,4].to_s                                    # => "[1, 2, 3, 4]"

instead of

RUBY_VERSION                                      # => "1.8.5"
[1,2,3,4].to_s                                    # => "1234"