给出一个字符串" 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
哪个有效,但似乎我正在努力工作......