2010-04-21 111 views
17

我在Windows 7爲什麼relative_require不能在Ruby 1.8.6上工作?

學習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  

預先感謝任何幫助。

+2

這是將代碼從第3章鎬頭書! – 2011-02-14 21:11:38

回答

11

編輯:

早在天哪裏這個問題,有人問它被稱爲紅寶石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' 
+12

有,但只有1.9。 – molf 2010-04-21 07:38:12

+0

@molf:我只是在尋找指定的版本。 – Aurril 2010-04-21 07:39:22

+0

非常感謝,我安裝了較新版本的Ruby,它可以工作。 – WANNABE 2010-04-21 10:54:28

34

require_relative不會在你的Ruby版本存在。你可以升級紅寶石,安裝backports寶石和require 'backports/1.9.1/kernel/require/relative',但最簡單的解決將是改變你的要求來:

require File.join(File.dirname(__FILE__), 'csv_reader') 
+0

感謝Shanna,非常感謝您的建議 – WANNABE 2010-04-21 10:54:48

+1

建議使用'require File.expand_path('another_file',__FILE __)',如果您需要加載''../ csv_reader'',它可以很好地解析父目錄 – huocp 2015-01-12 04:24:43

相關問題