未定义的方法`[]'为nil:NilClass在尝试访问数组中的项目时

时间:2016-03-22 00:26:00

标签: ruby-on-rails arrays ruby indexing rubygems

我无法访问此数组中的项目,我不确定原因。

我正在使用名为FastImage的Gem,它接受图像URL并返回其属性以抓取网页并返回其找到的所有图像的宽度和高度。

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

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

这将打印每个相应数组中的维度,但尝试使用[]的索引访问项目会返回上述错误。

1 个答案:

答案 0 :(得分:1)

如果img不是图片的有效网址,则FastImage.size(img)会返回nil; FastImage.size(img)[0]会抛出错误。

如果您使用的是Ruby 2.3,则可以编写FastImage.size(img)&.[](0),但这很丑陋。对于任何Ruby,您都可以这样做:

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

在任何一种情况下,更好的正则表达式都应该减少误报,这应该减少不必要的HTTP请求。一个简单的事情可能是将\b替换为$,因为扩展名应该是URL中的最后一项(除非您有像foo.jpeg?q=276747622这样的奇怪的缓存无效网址。)