ruby - 为什么 relative_require 在 Ruby 1.8.6 上不起作用?

标签 ruby require

我正在 Windows 7 上学习 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       

在此先感谢您的帮助。

最佳答案

require_relative 在您的 Ruby 版本中不存在。您可以升级 Ruby,安装 backports gem 和 require 'backports/1.9.1/kernel/require/relative' 但最简单的解决方法是将您的 require 更改为:

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

关于ruby - 为什么 relative_require 在 Ruby 1.8.6 上不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2681031/

相关文章:

node.js - 检测是通过require调用还是直接通过命令行调用

ruby - #tty 是什么?在 STDIN 上意味着/在 ruby​​ 中做什么?

ruby-on-rails - rails 。 Capybara fill_in 找到文本输入但没有 fill_in

javascript - Require 在 NodeJS 应用程序中无法识别

react-native - 当我在 React Native 中使用 `require` 加载图片时,它是否真的将图片加载到内存中?什么时候发布?

javascript - 使用 require 设置原型(prototype)自执行函数时浏览器上下文

ruby-on-rails - 设置没有种子数据的数据库

ruby-on-rails - 保存 Rails 4 对象的集合(强参数)

ruby-on-rails - 如何在集合中使用 has_key?

php - 为什么 PHP "require"找不到文件?