2016-03-22 10 views
-1

この配列の項目にアクセスすることができず、その理由がわかりません。未定義のメソッド `[] 'for nil:配列内の項目にアクセスしようとするとNilClass

私は画像URLを取得し、そのプロパティを返してWebページをクロールし、見つかったすべての画像の幅と高さを返すFastImageというGemを使用しています。

- url = open("http://google.com/").read 

- imgs = URI.extract(url).select{|img| img[/\.(?:png|jpe?g)\b/]}.each do |img| 
    = FastImage.size(img) 

これは、各配列の次元を印刷するが、[]と、そのインデックスでアイテムにアクセスしようとすると、上記のエラーを返します。

+0

この場合、ここではエラーは発生しません(実際にイメージ名であるわけではないので、コードには穴があり、寸法を印刷できません)。コードのどの部分がエラーを投げているかを示してください。 – Amadan

+0

それは私が心配していることではないイメージタグを排他的につかむわけではありません。このように配列の末尾にインデックスを追加すると、[0]がエラーを引き起こします。 – JackHasaKeyboard

+0

* how *のように追加しますか?あなたの説明からは分かりません。 – tadman

答えて

1

imgが有効な画像URLでない場合、FastImage.size(img)nilを返します。 FastImage.size(img)[0]はエラーをスローします。

Ruby 2.3の場合は、FastImage.size(img)&.[](0)と書くことができますが、それは醜いです。任意のRubyのために、あなたがこれを行うことができます:

= size = FastImage.size(img) and size[0] 

をいずれの場合も、より良い正規表現は、不要なHTTPリクエストを削減すべきである偽陽性、を減らす必要があります。 1つの簡単なことは、\b$に置き換えることです。これは、拡張子が本当にURLの最後のものになるはずです(foo.jpeg?q=276747622のような奇妙なキャッシュ無効化URLがない限り)。

関連する問題