嵌套模块命名空间?红宝石

时间:2014-06-02 01:17:32

标签: ruby oop dynamic module namespaces

给出以下代码结构......

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

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

并且,有没有办法动态地执行它,如果我有一个字符串是我想要访问的类名?

2 个答案:

答案 0 :(得分:1)

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"

答案 1 :(得分:0)

这就是你静态称呼的方式:

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方法。