我正在学习Windows7上的Ruby (使用1.8.6版)。
当我尝试运行下面的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
提前感谢您的帮助。
发布于 2010-04-21 15:34:52
编辑:
在这个问题被问到的日子里,它指的是Ruby1.8.6,那里没有require_relative
。到目前为止,Ruby 1.8.6已经过时了,不应该再使用了。
原创:
根本就没有方法名require_relative
。你也可以在那里使用require
。
Ruby核心库的扩展项目中包含了require_relative
函数,可在以下位置找到:http://www.rubyforge.org/projects/extensions
您应该能够使用gem install extensions
安装它们。然后,在您的代码中,在require_relative
之前添加以下行
require 'extensions/all'
发布于 2010-04-21 15:40:50
require_relative
在您的Ruby版本中不存在。你可以升级Ruby,安装Ruby gem和require 'backports/1.9.1/kernel/require/relative'
,但最简单的修复方法是将你的需求更改为:
require File.join(File.dirname(__FILE__), 'csv_reader')
https://stackoverflow.com/questions/2681031
复制相似问题