CSV和<<的Ruby错误

0 ruby

好吧,我认为代码说明了:)

# book_in_stock.rb

class BookinStock
  attr_reader :isbn, :price

  def initialize(isbn, price)
    @isbn = isbn
    @price = Float(price)
  end
end

# csv_reader.rb

require 'csv'

class CsvReader
  def initialize
    @book_in_stock = []
  end

  def read_in_csv_data(csv_file_name)
    CSV.foreach(csv_file_name, headers: true) do |row|
      @books_in_stock << BookinStock.new(row["ISBN"], row["Amount"])
    end
  end

  # later we'll see how to use inject to sum a collection
  def total_value_in_stock
    sum = 0.0
    @books_in_stock.each { |book| sum += book.price }

    sum
  end

  def number_of_each_isbn
    # ...
  end
end

# stock_stats.rb

reader = CsvReader.new()

ARGV.each do |csv_file_name|
  STDERR.puts "[+] Processing #{csv_file_name}"
  reader.read_in_csv_data(csv_file_name)
end

puts "[+] Total value = #{reader.total_value_in_stock}"
Run Code Online (Sandbox Code Playgroud)

跑步时我得到:

# +search/pickaxe/csv $ ruby1.9.1 test.rb data.csv 
# [+] Processing data.csv
# test.rb:23:in `block in read_in_csv_data': undefined method `<<' for nil:NilCla
# ss (NoMethodError)
#        from /usr/lib/ruby/1.9.1/csv.rb:1760:in `each'
#        from /usr/lib/ruby/1.9.1/csv.rb:1196:in `block in foreach'
#        from /usr/lib/ruby/1.9.1/csv.rb:1334:in `open'
#        from /usr/lib/ruby/1.9.1/csv.rb:1195:in `foreach'
#        from test.rb:22:in `read_in_csv_data'
#        from test.rb:46:in `block in <main>'
#        from test.rb:44:in `each'
#        from test.rb:44:in `<main>'
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

myk*_*hal 5

'@books_in_stock' != '@book_in_stock' # !
Run Code Online (Sandbox Code Playgroud)

(错字)