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
等其他枚举器上调用这些方法。对此有何解释?
答案 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