2013-10-24 91 views
0

新的Mac OS更新將系統Ruby提升到了2.0,這非常棒,但現在我看到很多腳本中的錯誤,我不知道如何修復。具體來說,我有代碼,要求用mdfind文件,然後閱讀它們,就像這樣:Ruby 2.0中未定義的方法「each」

files = %x{mdfind -onlyin /Users/Username/Dropbox/Tasks 'kMDItemContentModificationDate >= "$time.today(-1)"'} 
files.each do |file| 

現在我就在那說

undefined method `each' for #<String:0x007f83521865c8> (NoMethodError)" 

看來,如果每一個現在需要一個錯誤預選賽。我嘗試了each_line,但是這導致了更多的錯誤。有一個簡單的替代品,我忽略了嗎?

+2

字符串的別名沒有辦法'each'。它不適用於任何現代的紅寶石。 –

+0

做'放files.class',你會得到答案..爲什麼錯誤。 –

+0

塞爾吉奧 - 這個確切的腳本在1.8.7上工作,就在昨天。 – craigeley

回答

6

紅寶石1.8曾經有String#each這是做隱式分裂。

each(separator = $ /){| substr |塊} => str

使用提供的參數作爲記錄分隔符(缺省爲$/$),將每個子串依次傳遞給提供的塊。如果提供了零長度記錄分隔符,則字符串將被拆分爲多個連續換行符分隔的段落。

我相信,明確的分割應該在現代紅寶石中起作用。

files.split($/).each do |file| 

其中$/是換行字符。您可以使用顯式字符,因爲您的腳本無論如何都不是可移植的。

files.split("\n").each do |file| 

更新

,或者你也可以只使用已經滅絕each

files.each_line do |file| 
+0

工作就像一個魅力。謝謝,塞爾吉奧。 – craigeley

+4

['String.each_line'](http://www.ruby-doc.org/core-2.0.0/String.html#method-i-each_line)想成爲你的朋友。 –

+0

@theTinMan:對,錯過了:( –

相關問題