require_relative - ¿Por qué relative_require no funciona en Ruby 1.8.6?
`require'': cannot load such file (2)
Estoy aprendiendo Ruby (usando la versión 1.8.6) en Windows 7.
Cuando intento ejecutar el programa stock_stats.rb a continuación, aparece el siguiente error:
C:/Users/Will/Desktop/ruby>ruby stock_stats.rb
stock_stats.rb:1: undefined method `require_relative'' for main:Object (NoMethodE
rror)
Tengo tres archivos de código 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
Gracias de antemano por cualquier ayuda.
require_relative
no existe en tu versión de Ruby. Puede actualizar Ruby, instalar la gema de backports y require ''backports/1.9.1/kernel/require/relative''
pero la solución más sencilla será cambiar su requerimiento para:
require File.join(File.dirname(__FILE__), ''csv_reader'')
Editar:
En los días en que se hizo esta pregunta, se refería a Ruby 1.8.6, donde no había ningún require_relative
. Por ahora, Ruby 1.8.6 está obsoleto y ya no debe usarse.
Original:
Simplemente no hay un nombre de método require_relative
. Usted puede utilizar allí también.
La función require_relative
se incluye en un proyecto de extensión a las bibliotecas principales de Ruby, que se encuentra aquí: http://www.rubyforge.org/projects/extensions
Deberías poder instalarlos con las gem install extensions
. Luego, en su código, agregue la siguiente línea antes de require_relative
:
require ''extensions/all''