我有一个模块,其中包含名为String
的类(以及其他类。)我需要按名称查找类,如果没有这样的类,则优雅地退回。
module Mod1
module String
end
end
Mod1.const_get 'String'
#⇒ Mod1::String
Kernel.const_get '::Mod1::String'
#⇒ Mod1::String
到目前为止,这么好。当我尝试查找不存在的类时,我预计会收到NameError
,这很好。问题是如果在全局命名空间中存在具有给定名称的类,则返回它:
Mod1.const_get 'Fixnum'
#⇒ Fixnum < Integer
Kernel.const_get '::Mod1::Fixnum'
#⇒ Fixnum < Integer
我理解原因,但我的问题是:是否只有一个现成的方法来查找给定命名空间中的常量?
现在我用
检查结果result.to_s.start_with?(namespace)
但这绝对不是缩小查找范围的最佳方法。
答案 0 :(得分:8)
答案是:
{
"name": "X",
"children": [{
"name": "Y",
"value": Z
},
{
"name": "Y2",
"value": Z2
}]
}
这是doc:
Mod1.const_get 'Fixnum', false
https://github.com/ruby/ruby/blob/449fbfd4d4ce47be227804c22214fed32a5b0124/object.c#L2027