Почему на Ruby 1.8.6 не работает relative_require?
Я изучаю 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
Заранее благодарим за помощь.
Ответы
Ответ 1
Edit:
В те дни, когда этот вопрос задавался, он ссылался на Ruby 1.8.6, где не было require_relative
. К настоящему времени Ruby 1.8.6 устарел и больше не должен использоваться.
Оригинал:
Просто нет имени метода require_relative
. Вы также можете использовать require
.
Функция require_relative
включена в проект расширения в основные библиотеки Ruby, найденные здесь: http://www.rubyforge.org/projects/extensions
Вы можете установить их с помощью gem install extensions
.
Затем в вашем коде добавьте следующую строку перед require_relative
:
require 'extensions/all'
Ответ 2
require_relative
не существует в вашей версии Ruby. Вы можете обновить Ruby, установить backports gem и require 'backports/1.9.1/kernel/require/relative'
, но самым простым решением будет изменение вашего требования:
require File.join(File.dirname(__FILE__), 'csv_reader')