“未定义的方法”;每一个;在Ruby 2.0中

“未定义的方法”;每一个;在Ruby 2.0中,ruby,Ruby,新的Mac OS更新将系统Ruby升级到了2.0,这很好,但现在我发现我的许多脚本中存在错误,我不知道如何修复这些错误。具体来说,我的代码使用mdfind调用文件,然后读取它们,如下所示: files = %x{mdfind -onlyin /Users/Username/Dropbox/Tasks 'kMDItemContentModificationDate >= "$time.today(-1)"'} files.each do |file| 现在我得到一个错误,它说 undefi

新的Mac OS更新将系统Ruby升级到了2.0,这很好,但现在我发现我的许多脚本中存在错误,我不知道如何修复这些错误。具体来说,我的代码使用mdfind调用文件,然后读取它们,如下所示:

files = %x{mdfind -onlyin /Users/Username/Dropbox/Tasks 'kMDItemContentModificationDate >= "$time.today(-1)"'}
files.each do |file|
现在我得到一个错误,它说

undefined method `each' for #<String:0x007f83521865c8> (NoMethodError)"
#(NoMethodError)的未定义方法“each” 似乎每一行现在都需要一个限定符。我尝试了每一行,但这产生了额外的错误。是否有一个简单的替代品,我忽略了这一点?

Ruby 1.8以前使用的是隐式拆分

每个(分隔符=$/){substr | block}=>str 使用提供的参数作为记录分隔符($/默认情况下)拆分str,将每个子字符串依次传递给提供的块。如果提供了长度为零的记录分隔符,则将字符串拆分为由多个连续换行分隔的段落

我相信,明确的分裂在现代红宝石中应该是有效的

files.split($/).each do |file|
其中,
$/
是换行符。您可以使用显式字符,因为您的脚本无论如何都不可移植

files.split("\n").each do |file|
更新 或者,您可以使用现在已灭绝的
的别名

files.each_line do |file|
Ruby 1.8以前有一个执行隐式拆分的应用程序

每个(分隔符=$/){substr | block}=>str 使用提供的参数作为记录分隔符($/默认情况下)拆分str,将每个子字符串依次传递给提供的块。如果提供了长度为零的记录分隔符,则将字符串拆分为由多个连续换行分隔的段落

我相信,明确的分裂在现代红宝石中应该是有效的

files.split($/).each do |file|
其中,
$/
是换行符。您可以使用显式字符,因为您的脚本无论如何都不可移植

files.split("\n").each do |file|
更新 或者,您可以使用现在已灭绝的
的别名

files.each_line do |file|

String没有method
each
。它在任何现代ruby中都不起作用。do
put files.class
,你会得到答案的。为什么会出现错误。Sergio-就在昨天,这个确切的脚本在1.8.7上工作过。显然,在1.8中有String#each。但现在没有了。Arup-我不确定我是否理解你的评论。String没有method
each
。它在任何现代ruby中都不起作用。do
放入文件。class
,你会得到答案。为什么会出错。Sergio-这个确切的脚本在1.8.7上工作,就在昨天。显然,在1.8中每个都有字符串。但现在不会了。Arup-我不确定我是否理解你的评论。工作得很有魅力。谢谢,Sergio。想成为你的朋友。李工作过吗谢谢你,塞吉奥。想成为你的朋友。