2010-04-21 16 views
17

मैं रूबी (संस्करण 1.8.6 का प्रयोग करके) जब मैं नीचे stock_stats.rb कार्यक्रम चलाने का प्रयास सीख रहा हूँ विंडोज 7रूबी 1.8.6 पर सापेक्ष_क्रक्चर क्यों काम नहीं करता है?

पर, मैं निम्नलिखित त्रुटि मिलती है:

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

मैं

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}" 
: तीन v.small कोड फ़ाइलें

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 से कोड है कि! –

उत्तर

11

संपादित करें: दिनों जहां इस प्रश्न पूछा गया था यह रूबी 1.8.6 करने के लिए भेजा है, जहां वहाँ था कोई require_relative में

वापस। अब तक रूबी 1.8.6 पुराना है और अब इसका उपयोग नहीं किया जाना चाहिए।

मूल:

बस कोई विधि नाम require_relative नहीं है। आप वहां भी require का उपयोग कर सकते हैं।

require_relative समारोह रूबी मुख्य लाइब्रेरीज, यहां पाया के लिए एक विस्तार परियोजना में शामिल है: http://www.rubyforge.org/projects/extensions

आप उन्हें gem install extensions साथ स्थापित करने के लिए सक्षम होना चाहिए। फिर अपने कोड में require_relative से पहले निम्न पंक्ति जोड़ें:

require 'extensions/all' 
+12

वहाँ है, लेकिन यह केवल 1.9 में है। – molf

+0

@molf: मैं केवल निर्दिष्ट संस्करण की तलाश में था। – Aurril

+0

बहुत बहुत धन्यवाद, मैंने रूबी का नया संस्करण स्थापित किया है और यह काम करता है। – WANNABE

34

require_relative रूबी के अपने संस्करण में मौजूद नहीं है। आप रूबी उन्नयन कर सकता है, backports मणि और require 'backports/1.9.1/kernel/require/relative' लेकिन सबसे आसान ठीक स्थापित करने के लिए अपने की आवश्यकता को बदलने के लिए होगा:

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

धन्यवाद शन्ना, वास्तव में आपकी सलाह की सराहना करते हैं – WANNABE

+1

'फ़ाइल.expand_path (' another_file ', __FILE __) की आवश्यकता का उपयोग करने का सुझाव देता है, जो आपको' ../ csv_reader '' लोड करने की आवश्यकता होने पर मूल निर्देशिका को अच्छी तरह से हल कर सकता है। – huocp

संबंधित मुद्दे