Ruby on rails 未定义的方法“[]';for nil:NilClass尝试访问数组中的项时

Ruby on rails 未定义的方法“[]';for nil:NilClass尝试访问数组中的项时,ruby-on-rails,arrays,ruby,indexing,rubygems,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) 这会打印每个数组中的维度,但尝试通过其索引使

我无法访问此阵列中的项目,我不确定原因

我正在使用一个名为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)

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

如果
img
不是图像的有效URL,
FastImage.size(img)
返回
nil
<代码>快速图像大小(img)[0]将抛出错误

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

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

无论哪种情况,更好的正则表达式都应该减少误报,这应该减少不必要的HTTP请求。一件简单的事情可能是将
\b
替换为
$
,因为扩展应该是URL中的最后一件事(除非您有像
foo.jpeg?q=276747622
)这样的奇怪的缓存破坏URL)。如果这打印了维度,那么显然不会在这里产生错误(虽然您的代码中存在漏洞,无法打印维度,因为并非所有选定的内容都是图像名称)。请显示代码的哪一部分出错。这不是我所担心的,它不会独占图像标记。在数组末尾添加索引,如下图所示:[0]导致错误。如何附加它?您的解释不清楚。
[0]
本身不是索引,它是一个单元素列表。请显示生成错误的完整代码。您将
[0]
附加到什么?如果您试图访问
FastImage.size(img)[0]
,那么您当然会得到错误。“它不会专门抓取图像标签,这不是我担心的。”-你应该这样做:对于每个非图像,
FastImage.size
返回
nil
,而
nil[0]
是一个错误。