Ruby将大型源文件分成多个文件

时间:2011-08-15 12:54:25

标签: ruby inheritance

我正在编写一个Ruby脚本,它本来应该是一个小东西但是已经变得非常大,大到可以把所有东西塞进一个源文件中。所以我试图将项目分成不同的文件。我有四个类,我想将每个类放在自己独立的源文件中。

我做了什么:

我将所有课程都移到了他们自己的文件中,所以现在我有了这个

proj/GoogleChart.rb
proj/BarChart.rb
proj/PieChart.rb
proj/GroupedBarChart.rb

现在他们在其他文件中我在我从GoogleChart继承的所有子类中得到uninitialized constant GoogleChart (NameError),即

require 'GoogleChart'
BarChart < GoogleChart

谁能告诉我出了什么问题?

由于

修改

使用ruby版本1.8.4

我也尝试过使用绝对路径:

require 'C:/Documents and Settings/proj/GoogleChart.rb'这仍然是NameError

1 个答案:

答案 0 :(得分:1)

在Ruby 1.8.x中,.是加载路径的一部分。因此,您至少应该尝试通过包含以下内容来调试:

puts $:
require 'GoogleChart'
class BarChart < GoogleChart
end

并在IRB会话中加载:

  1. 在您的目录proj中打开会话。
  2. 输入require 'BarChart'
  3. 查看结果。
  4. 对我而言:

    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
    

    因此需求对我来说是成功的,.是路径的一部分(应该如此)。正如您所看到的,我正在使用Ruby 1.8.7,我不知道自1.8.4以来是否有任何改变在这里是相关的。

    因此,请准确描述您运行文件的方式:

    • 您是否打开过shell以运行该文件?
    • 该shell的当前工作目录是什么?
    • 双击它会跑吗?

    仅当您在proj目录中并且在那里运行时(在您的shell路径中使用ruby)ruby BarChart.rb