-1

我想遍历一个 URL 数组,如果给定 URL 的 HTTP 请求超时,则从中删除元素。它已通过以下方式实施:

@urls.delete_if do |url|
  begin
    doc = perform_request(some_params)
    break
  rescue TimeoutError
    Rails.logger.warn("URL #{url} times out, will be removed from list")
    true
  end
end

有人想要更清洁的解决方案吗?

4

2 回答 2

1

可能出错的事情比超时要多得多,问肯定比问否定要好。也就是说,网站是否以我想要的方式响应,而不是网站没有以我想要的方式响应。

此外,我会鼓励练习不变性,也就是说,不要更改您的数据,而是从旧版本创建新版本。我的版本看起来像:

@urls = %w[www.google.com www.example.com]
valid_urls = @urls.select{ |url| up?(url)} #=> [www.google.com]

def up?(url)
  Net::HTTP.new(url).head('/').kind_of? Net::HTTPOK
end
于 2013-01-04T15:38:09.460 回答
0

一切似乎都是合理的,除了break在循环中。我也喜欢溶液的清洁度。

于 2013-01-04T15:18:03.923 回答