Ruby 1.9 Array.to_s ведет себя по-другому? - PullRequest
16 голосов
/ 18 октября 2010

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

Когда я использовал 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

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

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

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

Ответы [ 2 ]

29 голосов
/ 18 октября 2010

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

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

3 голосов
/ 18 октября 2010

Пожалуйста, смотрите здесь , под 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"
...