嵌套模块命名空间?鲁比(人名)



给定以下代码结构…

module Foo
  module Bar
    class A
    end
  end
  class B
    def initialize(stuff)
    ...
    end
  end
end

如何从类A中调用B的.new方法?

并且,是否有一种方法可以动态地做到这一点,如果我有一个字符串,是我想要访问的类名?

module Foo
  module Bar
    class A
    end
  end
  class B
    def initialize(stuff)
      puts "I like #{stuff}"
    end
  end
end

可以从任何地方调用:

include Foo
klass = "B"
Module.const_get(klass).send(:new, "cats")
  #=> "I like cats"

静态调用方式:

module Foo
  class B
    def initialize(stuff)
    end
  end
  module Bar
    class A
      puts Foo::B.new(1)
    end
  end
end

要动态调用它,请检查@CarySwoveland答案。您将需要使用const_get和send方法。

最新更新