我尝试以编程方式获取常量(例如,类),但只想查看特定命名空间中定义的常量。但是,const_get
会在搜索常量时冒出更高的命名空间。例如:
module Foo
class Bar
end
end
class Quux
end
如果您再要求Foo
返回常量"Bar"
,则会返回正确的类。
Foo.const_get('Bar')
#=> Foo::Bar
但是,如果您要求"Quux"
,它会冒出它的搜索路径并找到顶级Quux:
Foo.const_get('Quux')
#=> Quux
有没有办法在const_get
被调用的模块中进行仅搜索?
答案 0 :(得分:3)
检查mod中给定名称的常量如果设置了inherit,则查找还将搜索祖先(如果mod是模块,则查找对象。)
如果找到定义,则返回常量的值,否则引发NameError。
然后您可以执行以下操作:
module Foo
class Bar
end
end
class Quux
end
Foo.const_get('Quux',false) rescue NameError
# >> NameError
Foo.const_get('Bar',false) rescue NameError
# >> Foo::Bar