我正在与嵌套模块和红宝石中的这些模块中的类的访问斗争。无法访问嵌套的红宝石模块中的类
我创建了一个简单的示例来显示我的问题。 app.rb和test.rb被放置在同一个文件夹,同时sub_test.rb被放置在称为测试的子文件夹。
app.rb
# /app.rb
require_relative 'test.rb'
Test::NotWorkingClass.work
test.rb
# /test.rb
module Test
require_relative 'test/sub_test'
class NotWorkingClass
def self.work
puts 'Test::NotWorkingClass.work'
end
end
end
测试/ sub_test.rb
# /test/sub_test.rb
module Test
module SubTest
Test::NotWorkingClass.work
end
end
当执行应用程序我得到这个错误:
/test/sub_test.rb:3:in `<module:SubTest>': uninitialized constant Test::NotWorkingClass (NameError)
当我在sub_test.rb一切正常注释掉测试的执行:: NotWorkingClass。
而现在我不明白的奇怪的事情。我修改我的例子在测试文件夹中创建一个名为not_working_class.rb文件,并将其包含在test.rb文件:
test.rb
# /test.rb
module Test
require_relative 'test/not_working_class'
require_relative 'test/sub_test'
end
测试/ not_working_class。 RB
# /test/not_working_class.rb
module Test
class NotWorkingClass
def self.work
puts 'Test::NotWorkingClass.work'
end
end
end
而现在,示例工作。
那么,为什么我不能访问test.rb文件中定义的类,但可以在单独的文件中定义时访问它们?
另外,'require's应该(几乎总是)在你的文件的顶部,而不是在你的'module'里面。 –