Ruby将大型源文件分隔为多个文件

Ruby将大型源文件分隔为多个文件,ruby,inheritance,Ruby,Inheritance,我正在写一个Ruby脚本,本来应该是一个小东西,但现在已经变得相当大了,大到可以把所有东西都塞进一个源文件。因此,我试图将项目分为不同的文件。我有四个类,我想把每个类放在各自独立的源文件中 我所做的: 我把所有的类都移动到它们自己的文件中,所以现在我有了这个 proj/GoogleChart.rb proj/BarChart.rb proj/PieChart.rb proj/GroupedBarChart.rb 现在它们在其他文件中,我从GoogleChart继承的行上的所有子类中都得到了未初

我正在写一个Ruby脚本,本来应该是一个小东西,但现在已经变得相当大了,大到可以把所有东西都塞进一个源文件。因此,我试图将项目分为不同的文件。我有四个类,我想把每个类放在各自独立的源文件中

我所做的:

我把所有的类都移动到它们自己的文件中,所以现在我有了这个

proj/GoogleChart.rb
proj/BarChart.rb
proj/PieChart.rb
proj/GroupedBarChart.rb
现在它们在其他文件中,我从GoogleChart继承的行上的所有子类中都得到了
未初始化的常量GoogleChart(NameError)

require 'GoogleChart'
BarChart < GoogleChart
需要“谷歌图表”
条形图<谷歌图表
谁能告诉我怎么了

谢谢

编辑

使用ruby 1.8.4版

我还尝试使用绝对路径:


require'C:/Documents and Settings/proj/GoogleChart.rb'
这仍然会在Ruby 1.8.x中产生一个
名称错误
,而
是加载路径的一部分。因此,您至少应该尝试通过包括以下内容来调试:

puts $:
require 'GoogleChart'
class BarChart < GoogleChart
end
因此,require对我来说是成功的,
是路径的一部分(它应该是这样的)。如您所见,我正在使用Ruby 1.8.7,我不知道自1.8.4以来是否有任何与此相关的变化

因此,请准确描述您如何运行文件:

  • 您是否打开了一个shell来运行该文件
  • 该shell的当前工作目录是什么
  • 你是通过双击它来运行的吗

它只在您位于
proj
目录中并在那里运行(在shell路径中使用ruby)
ruby BarChart.rb

您是否也使用模块来构建名称空间?是否有第二个GoogleChart.rb(或者换句话说:你确定你加载了正确的GoogleChart.rb-可能需要相对更好)我应该在上面提到,我们的Ruby版本是1.8.4,所以
require\u relative
不是一个选项,没有意义的是,甚至试图要求绝对路径也不起作用
require C:/Document and Settings/proj/BarChart.rb
仍然返回一个
namererror
,该错误对我来说也是交互成功的,而
是我加载路径的一部分:
c:/ruby/lib/ruby/site_-ruby/1.8 | c:/ruby/lib/ruby/site_-ruby/1.8/i386 msvcrt | c:/ruby/lib/site|ruby/c:/ruby/lib/ruby/1.8/i386-mswin32 |
但由于某些原因,当我运行最后添加的文件时,它不起作用。请检查一下。当我从shell和Scite运行时,我收到了NameError。您是否尝试将项目文件移动到路径中没有空格的目录中?只是胡乱猜测,所以。。。
c:\apps\ruby\test\proj>irb
irb(main):001:0> require 'BarChart'
C:/Users/mliebelt/.pik/rubies/Ruby-187-p334/lib/ruby/site_ruby/1.8
C:/Users/mliebelt/.pik/rubies/Ruby-187-p334/lib/ruby/site_ruby/1.8/i386-msvcrt
C:/Users/mliebelt/.pik/rubies/Ruby-187-p334/lib/ruby/site_ruby
C:/Users/mliebelt/.pik/rubies/Ruby-187-p334/lib/ruby/vendor_ruby/1.8
C:/Users/mliebelt/.pik/rubies/Ruby-187-p334/lib/ruby/vendor_ruby/1.8/i386-msvcrt
C:/Users/mliebelt/.pik/rubies/Ruby-187-p334/lib/ruby/vendor_ruby
C:/Users/mliebelt/.pik/rubies/Ruby-187-p334/lib/ruby/1.8
C:/Users/mliebelt/.pik/rubies/Ruby-187-p334/lib/ruby/1.8/i386-mingw32
.
=> true