搜索词法范围的Ruby const_get

时间:2016-06-28 19:53:47

标签: ruby

给出一个字符串" XYZZY"在ruby中我想要一个const_get版本,它将在词法范围链中找到该常量。

例如,在下面的Whack中,查找起来就好了,但是当我在字符串上做一个const_get时,你就会看到这个问题。它只是在当前范围内进行const查找,即它不搜索...是否有一个将搜索的const_get版本?

module Foo
  class Whack
  end
  module Bar
    class Baz
      def self.test(s)
        const_get s.to_s
      end
      def self.test1
        test(Whack)
      end
    end
  end
end

puts Foo::Bar::Baz.test1
puts Foo::Bar::Baz.test("Whack")

输出

>Foo::Whack
>Whack: uninitialized constant Foo::Bar::Baz::Whack

与此同时,我正在使用此代码:

  def const_get_with_lookup(name)
    scopes = self.class.name.split('::').inject([Module]) do |nesting, next_const|
      nesting + [nesting.last.const_get(next_const)]
    end.reverse
    scopes.each do |scope|
      return scope.const_get(name) if scope.const_defined?(name)
    end
  end

哪个有效,但似乎我正在努力工作......

0 个答案:

没有答案