17

私は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)

私は3つの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       

助けてくれてありがとう。

4

2 に答える 2

34

require_relativeお使いのバージョンのRubyには存在しません。Rubyをアップグレードし、バックポートgemをインストールすることもできますrequire 'backports/1.9.1/kernel/require/relative'が、最も簡単な修正は、requireを次のように変更することです。

require File.join(File.dirname(__FILE__), 'csv_reader')
于 2010-04-21T07:40:50.480 に答える
12

編集:

この質問が出された当時は、Ruby1.8.6がありませんでしrequire_relativeた。今ではRuby1.8.6は古くなっており、もう使用しないでください。

オリジナル:

メソッド名はありませんrequire_relativerequireそちらでもご利用いただけます。

このrequire_relative関数は、Rubyコアライブラリの拡張プロジェクトに含まれています。http ://www.rubyforge.org/projects/extensionsにあります。

でインストールできるはずですgem install extensionsrequire_relative次に、コードで:の前に次の行を追加します。

require 'extensions/all'
于 2010-04-21T07:34:52.013 に答える