2013-10-24 53 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:对,错过了:( –

相关问题