Ruby 使用类自动加载类<&书信电报;自进轨道

Ruby 使用类自动加载类<&书信电报;自进轨道,ruby,ruby-on-rails-4,metaprogramming,Ruby,Ruby On Rails 4,Metaprogramming,我有以下3个文件: 测试.rb # doesn't work, raises error: NameError: uninitialized constant Baz Foo::Bar.do_stuff_1 # does work Foo::Bar.do_stuff_2 # does work Foo::Bar.new.do_stuff_3 module Foo class Bar class << self def do_stuf

我有以下3个文件:

测试.rb

# doesn't work, raises error: NameError: uninitialized constant Baz
Foo::Bar.do_stuff_1

# does work
Foo::Bar.do_stuff_2

# does work
Foo::Bar.new.do_stuff_3
module Foo   
  class Bar    
    class << self    
      def do_stuff_1

        puts "class level: #{Baz.new.class}"

      end    
    end

    def self.do_stuff_2

      puts "class level: #{Baz.new.class}"

    end

    def do_stuff_3

      puts "Instance level: #{Baz.new.class}"

    end    
  end    
end
module Foo    
  class Baz   
    def initialize

    end    
  end    
end
bar.rb

# doesn't work, raises error: NameError: uninitialized constant Baz
Foo::Bar.do_stuff_1

# does work
Foo::Bar.do_stuff_2

# does work
Foo::Bar.new.do_stuff_3
module Foo   
  class Bar    
    class << self    
      def do_stuff_1

        puts "class level: #{Baz.new.class}"

      end    
    end

    def self.do_stuff_2

      puts "class level: #{Baz.new.class}"

    end

    def do_stuff_3

      puts "Instance level: #{Baz.new.class}"

    end    
  end    
end
module Foo    
  class Baz   
    def initialize

    end    
  end    
end

当其他方法正常执行时,
do\u stuff\u 1
方法引发异常,NameError:uninitialized constant Baz。我认为这与
class有关这本身不是一个自动加载问题,而是一个名称范围的问题。在第一种方法中,您属于
Bar
的单例类,因此需要将
Baz
作为
Foo::Baz
引用

如果要从该上下文引用
Foo::Baz
,而不使用名称
Foo
,则可以在该上下文中使用任何计算结果为
Foo
的表达式,例如
Module.nesting[2]
,如:

puts "class level: #{Module.nesting[2]::Baz.new.class}"}

有没有办法使用