2010-10-18 49 views
16

我寫了一個快速的小應用程序,它使用一些關鍵字獲取代碼的基本文件,替換關鍵字的文件,並輸出一個替換關鍵字的新文件。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之間導致此行爲的變化。 Ruby 1.9中to_s方法有所變化嗎?

*我在Ruby中

+0

示例代碼將是很好 – orip 2010-10-18 15:00:45

+0

我添加的源代碼,我希望是相關的。 – jrsconfitto 2010-10-18 15:32:00

+0

+1。我一直在使用Ruby 1.8和1.9,但從來不知道這種差異! – 2010-10-18 22:19:28

回答

29

是的,你打電話to_s是沒有經驗的字符串數組上。在1.8中相當於撥打join,在1.9中相當於撥打inspect

要在1.8和1.9中獲得所需的行爲,請撥打join而不是to_s

+0

什麼時候檢查有用? – chongman 2014-02-05 15:35:25

+0

@chongman你的意思是''to_s'上的數組?如果你試圖檢查的東西不是一個數組,那將是有用的。同樣使用'p' /'inspect'來檢查數組更清晰且更一致,因爲這是您用來檢查其他值的方法。 – sepp2k 2014-02-05 19:47:38

+0

謝謝。我意識到我的困惑是1.8.6(?)vs 1.9的問題。一個教程顯示''The Cat In Hat'.to_a',然後我假設'to_s'應該返回原來的字符串,我相信它在1.8.6中會這樣做。在1.9中,to_a作爲字符串的一種方法被淘汰。 'split(「」)'和'join'是逆。 – chongman 2014-02-05 21:18:53

3

請參閱hereArray

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"