Ruby 使用类自动加载类<&书信电报;自进轨道
我有以下3个文件: 测试.rbRuby 使用类自动加载类<&书信电报;自进轨道,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
# 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}"}
有没有办法使用类