ruby的CSV.foreach枚举器的解释?

时间:2013-12-05 19:25:45

标签: ruby csv foreach enumerator

Ruby的CSV.foreach('file.csv', headers: true)返回一个枚举器,但我似乎无法在其上调用任何可枚举的方法,即我无法调用CSV.foreach('file.csv', headers: true).map(&:to_hash)甚至CSV.foreach('file.csv', headers: true).to_a。这是意外行为,因为我可以在1.upto(5).to_a等其他枚举器上调用这些方法。对此有何解释?

1 个答案:

答案 0 :(得分:1)

查看来源here。在撰写本文时,CSV::foreach被定义为

def self.foreach(path, options = Hash.new, &block)
  open(path, options) do |csv|
    csv.each(&block)
  end
end

所以each枚举器包含在open块中,方法返回nil。如果您想与枚举器进行交互,您可以执行类似

的操作
CSV.open('file.csv') do |csv|
  csv.each.map do |row|
    # whatever
  end
end