0

我的代码:

  feeds = Website.find(:all).map{|w| w.feed_url}

  feeds.each do |u|
    begin 
      open(u)
    rescue
      feeds.delete(u)
    end
  end

示例提要可能是:['http://da.wordpress.org/feed/', 'asdasd']

如果有任何错误,我想挽救任何错误并从提要数组中删除提要 url。在这种情况下,应该删除 asdasd。

终端:

irb(main):133:0> feeds =  ['http://da.wordpress.org/feed/', 'asdasd']
=> ["http://da.wordpress.org/feed/", "asdasd"]
irb(main):134:0>  feeds.each do |u|
irb(main):135:1*     begin
irb(main):136:2*       open(u)
irb(main):137:2>     rescue
irb(main):138:2>       feeds.delete(u)
irb(main):139:2>     end
irb(main):140:1>   end
=> ["asdasd"]

它只是删除数组中的第一个元素,而不是删除 asdasd ...

4

1 回答 1

1

我编写了如下代码,它工作正常:

require 'open-uri'
feeds =  ['http://da.wordpress.org/feed/', 'asdasd']  
feeds.dup.each do|u| 
  begin 
    open(u) 
  rescue Errno::ENOENT
    feeds.delete(u) 
  end
end
p feeds 
# >> ["http://da.wordpress.org/feed/"]

尽管您的版本可以正常工作,但这不是一个好习惯。

require 'open-uri'
feeds =  ['http://da.wordpress.org/feed/', 'asdasd']  
feeds.each do|u| 
  begin 
    open(u) 
  rescue 
    feeds.delete(u) 
  end
end
p feeds 
# >> ["http://da.wordpress.org/feed/"]
于 2013-07-07T21:47:42.897 回答