我正在编写一个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
答案 0 :(得分:1)
在Ruby 1.8.x中,.
是加载路径的一部分。因此,您至少应该尝试通过包含以下内容来调试:
puts $:
require 'GoogleChart'
class BarChart < GoogleChart
end
并在IRB会话中加载:
proj
中打开会话。require 'BarChart'
对我而言:
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以来是否有任何改变在这里是相关的。
因此,请准确描述您运行文件的方式:
仅当您在proj
目录中并且在那里运行时(在您的shell路径中使用ruby)ruby BarChart.rb
。