返回动态提供名称的类的命名空间版本

时间:2014-07-24 18:30:22

标签: ruby

我想写一个方法,在这样的场景中执行我想要的输出:

class Bar
end

module Foo
  class Bar
  end
end

namespace(Bar, Foo)

def namespace(child, parent)
  # return Foo::Bar
end

我能想到的最好的,使用ActiveSupport:

def namespace(child, parent)
  "#{parent.name}::#{child.name}".constantize
end

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用Module::const_get

获取所需的输出
class Bar
end

module Foo
  class Bar
  end
end

def namespace(child, parent)
  parent.const_get(child.name)
end

namespace(Bar, Foo) # => Foo::Bar