-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 に答える