Почему не делает работы relative_require над Ruby 1.8.6?

Я изучаю Ruby (использующий версию 1.8.6) в Windows 7.

Когда я пытаюсь запустить stock_stats.rb программу ниже, я получаю следующую ошибку:

C:\Users\Will\Desktop\ruby>ruby stock_stats.rb
stock_stats.rb:1: undefined method `require_relative' for main:Object (NoMethodE
rror)

У меня есть три v.small файла кода:

stock_stats.rb

require_relative 'csv_reader'

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}"

csv_reader.rb

require 'csv' 
require_relative 'book_in_stock'

class CsvReader

  def initialize
    @books_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       

book_in_stock.rb

require 'csv' 
require_relative 'book_in_stock'

class CsvReader

  def initialize
    @books_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       

Заранее спасибо за любую справку.

17
задан Andrew Grimm 9 November 2011 в 02:37
поделиться

2 ответа

Изменить:

В те дни, когда задавался этот вопрос, он относился к Ruby 1.8.6, где не было require_relative . К настоящему времени Ruby 1.8.6 устарел и больше не должен использоваться.

Оригинал:

Просто нет имени метода require_relative . Вы также можете использовать require .

Функция require_relative включена в проект расширения основных библиотек Ruby, который можно найти здесь: http://www.rubyforge.org/projects/extensions

Вы должны быть в состоянии чтобы установить их с помощью расширений установки gem . Затем добавьте в свой код следующую строку перед require_relative :

require 'extensions/all'
11
ответ дан 30 November 2019 в 11:03
поделиться

require_relative не существует в вашей версии Ruby. Вы можете обновить Ruby, установить гем backports и require 'backports / 1.9.1 / kernel / require / relative' , но самым простым исправлением будет изменение требований на:

require File.join(File.dirname(__FILE__), 'csv_reader')
34
ответ дан 30 November 2019 в 11:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: