在Ruby中使用File对象和=的奇怪行为

时间:2015-10-12 19:51:15

标签: ruby-on-rails ruby

我的申请表中有一种非常奇怪的行为,出于某种原因,当我这样做时:

data.count

它将返回正确数量的条目(234)。但是,当我这样做时:

other_data = data
other_data.count

返回0,这是不正确的。

这是我的代码(数据是方法):

  def data
    begin
      file = open(url)
    rescue OpenURI::HTTPError => e
      self.update_column(:failed_at, Time.now)
      []
    end
  end

此外,使用此代码进行调试时:

puts "data: #{data}"
puts "other_data: #{other_data}"

我明白了:

data: #<File:0x007fbe7beef7c8>
other_data: #<File:0x007fbe7a1707b0>

请注意,内存地址不同。

我是如何获得对将返回正确计数的数据的引用以及允许我访问对象的其他方法的任何想法? (例如each_with_index - 它也适用于数据但不适用于other_data)

1 个答案:

答案 0 :(得分:0)

虽然我无法重现您的问题,但我相信您有一些范围问题或者在同一个实例上两次意外调用count

count方法计算返回文件(网页)的响应大小,然后将读指针移动到文件末尾。 (Read about IO pointers and seek here)

2.2.1 :002 > file = open('http://www.google.com')
 => #<Tempfile:/var/folders/my/l9cxzl7j3vs8cy9vqy0jzfvc0000gp/T/open-uri20151012-93142-387w2p> 
2.2.1 :003 > file.count
 => 25 
2.2.1 :004 > file.count
 => 0 

我在你的代码other_data中的某个地方打赌count,然后你看到了意想不到的behvaiour。我会尽力确保没有这样的事情发生。